|
Packit Service |
360c39 |
#include "clusterautoconfig.h"
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
#include <stdio.h>
|
|
Packit Service |
360c39 |
#include <stdlib.h>
|
|
Packit Service |
360c39 |
#include <ctype.h>
|
|
Packit Service |
360c39 |
#include <string.h>
|
|
Packit Service |
360c39 |
#include <stdint.h>
|
|
Packit Service |
360c39 |
#include <inttypes.h>
|
|
Packit Service |
360c39 |
#include <time.h>
|
|
Packit Service |
360c39 |
#include <sys/types.h>
|
|
Packit Service |
360c39 |
#include <sys/stat.h>
|
|
Packit Service |
360c39 |
#include <unistd.h>
|
|
Packit Service |
360c39 |
#include <linux/types.h>
|
|
Packit Service |
360c39 |
#include <linux/gfs2_ondisk.h>
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
#include "osi_list.h"
|
|
Packit Service |
360c39 |
#include "libgfs2.h"
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
/* GFS1 compatibility functions - so that programs like gfs2_convert
|
|
Packit Service |
360c39 |
and gfs2_edit can examine/manipulate GFS1 file systems. */
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
static __inline__ int fs_is_jdata(struct gfs2_inode *ip)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
return ip->i_di.di_flags & GFS2_DIF_JDATA;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
static __inline__ uint64_t *
|
|
Packit Service |
360c39 |
gfs1_metapointer(struct gfs2_buffer_head *bh, unsigned int height,
|
|
Packit Service |
360c39 |
struct metapath *mp)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
unsigned int head_size = (height > 0) ?
|
|
Packit Service |
360c39 |
sizeof(struct gfs_indirect) : sizeof(struct gfs_dinode);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
return ((uint64_t *)(bh->b_data + head_size)) + mp->mp_list[height];
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
int is_gfs_dir(struct gfs2_dinode *dinode)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
if (dinode->__pad1 == GFS_FILE_DIR)
|
|
Packit Service |
360c39 |
return 1;
|
|
Packit Service |
360c39 |
return 0;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
void gfs1_lookup_block(struct gfs2_inode *ip, struct gfs2_buffer_head *bh,
|
|
Packit Service |
360c39 |
unsigned int height, struct metapath *mp,
|
|
Packit Service |
360c39 |
int create, int *new, uint64_t *block)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
uint64_t *ptr = gfs1_metapointer(bh, height, mp);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (*ptr) {
|
|
Packit Service |
360c39 |
*block = be64_to_cpu(*ptr);
|
|
Packit Service |
360c39 |
return;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
*block = 0;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!create)
|
|
Packit Service |
360c39 |
return;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (lgfs2_meta_alloc(ip, block)) {
|
|
Packit Service |
360c39 |
*block = 0;
|
|
Packit Service |
360c39 |
return;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
*ptr = cpu_to_be64(*block);
|
|
Packit Service |
360c39 |
bmodified(bh);
|
|
Packit Service |
360c39 |
ip->i_di.di_blocks++;
|
|
Packit Service |
360c39 |
bmodified(ip->i_bh);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
*new = 1;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
void gfs1_block_map(struct gfs2_inode *ip, uint64_t lblock, int *new,
|
|
Packit Service |
360c39 |
uint64_t *dblock, uint32_t *extlen, int prealloc)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs2_sbd *sdp = ip->i_sbd;
|
|
Packit Service |
360c39 |
struct gfs2_buffer_head *bh;
|
|
Packit Service |
360c39 |
struct metapath mp;
|
|
Packit Service |
360c39 |
int create = *new;
|
|
Packit Service |
360c39 |
unsigned int bsize;
|
|
Packit Service |
360c39 |
unsigned int height;
|
|
Packit Service |
360c39 |
unsigned int end_of_metadata;
|
|
Packit Service |
360c39 |
unsigned int x;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
*new = 0;
|
|
Packit Service |
360c39 |
*dblock = 0;
|
|
Packit Service |
360c39 |
if (extlen)
|
|
Packit Service |
360c39 |
*extlen = 0;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!ip->i_di.di_height) { /* stuffed */
|
|
Packit Service |
360c39 |
if (!lblock) {
|
|
Packit Service |
360c39 |
*dblock = ip->i_di.di_num.no_addr;
|
|
Packit Service |
360c39 |
if (extlen)
|
|
Packit Service |
360c39 |
*extlen = 1;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
return;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
bsize = (fs_is_jdata(ip)) ? sdp->sd_jbsize : sdp->bsize;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
height = calc_tree_height(ip, (lblock + 1) * bsize);
|
|
Packit Service |
360c39 |
if (ip->i_di.di_height < height) {
|
|
Packit Service |
360c39 |
if (!create)
|
|
Packit Service |
360c39 |
return;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
build_height(ip, height);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
find_metapath(ip, lblock, &mp);
|
|
Packit Service |
360c39 |
end_of_metadata = ip->i_di.di_height - 1;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
bh = ip->i_bh;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
for (x = 0; x < end_of_metadata; x++) {
|
|
Packit Service |
360c39 |
gfs1_lookup_block(ip, bh, x, &mp, create, new, dblock);
|
|
Packit Service |
360c39 |
if (bh != ip->i_bh)
|
|
Packit Service |
360c39 |
brelse(bh);
|
|
Packit Service |
360c39 |
if (!*dblock)
|
|
Packit Service |
360c39 |
return;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (*new) {
|
|
Packit Service |
360c39 |
struct gfs2_meta_header mh;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
bh = bget(sdp, *dblock);
|
|
Packit Service |
360c39 |
mh.mh_magic = GFS2_MAGIC;
|
|
Packit Service |
360c39 |
mh.mh_type = GFS2_METATYPE_IN;
|
|
Packit Service |
360c39 |
mh.mh_format = GFS2_FORMAT_IN;
|
|
Packit Service |
360c39 |
gfs2_meta_header_out(&mh, bh->b_data);
|
|
Packit Service |
360c39 |
bmodified(bh);
|
|
Packit Service |
360c39 |
} else {
|
|
Packit Service |
360c39 |
if (*dblock == ip->i_di.di_num.no_addr)
|
|
Packit Service |
360c39 |
bh = ip->i_bh;
|
|
Packit Service |
360c39 |
else
|
|
Packit Service |
360c39 |
bh = bread(sdp, *dblock);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!prealloc)
|
|
Packit Service |
360c39 |
gfs1_lookup_block(ip, bh, end_of_metadata, &mp, create, new,
|
|
Packit Service |
360c39 |
dblock);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (extlen && *dblock) {
|
|
Packit Service |
360c39 |
*extlen = 1;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!*new) {
|
|
Packit Service |
360c39 |
uint64_t tmp_dblock;
|
|
Packit Service |
360c39 |
int tmp_new;
|
|
Packit Service |
360c39 |
unsigned int nptrs;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
nptrs = (end_of_metadata) ? sdp->sd_inptrs : sdp->sd_diptrs;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
while (++mp.mp_list[end_of_metadata] < nptrs) {
|
|
Packit Service |
360c39 |
gfs1_lookup_block(ip, bh, end_of_metadata, &mp,
|
|
Packit Service |
360c39 |
FALSE, &tmp_new,
|
|
Packit Service |
360c39 |
&tmp_dblock);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (*dblock + *extlen != tmp_dblock)
|
|
Packit Service |
360c39 |
break;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
(*extlen)++;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (bh != ip->i_bh)
|
|
Packit Service |
360c39 |
brelse(bh);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
int gfs1_writei(struct gfs2_inode *ip, char *buf, uint64_t offset,
|
|
Packit Service |
360c39 |
unsigned int size)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs2_sbd *sdp = ip->i_sbd;
|
|
Packit Service |
360c39 |
struct gfs2_buffer_head *bh;
|
|
Packit Service |
360c39 |
uint64_t lblock, dblock;
|
|
Packit Service |
360c39 |
uint32_t extlen = 0;
|
|
Packit Service |
360c39 |
unsigned int amount;
|
|
Packit Service |
360c39 |
int new;
|
|
Packit Service |
360c39 |
int journaled = fs_is_jdata(ip);
|
|
Packit Service |
360c39 |
const uint64_t start = offset;
|
|
Packit Service |
360c39 |
int copied = 0;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!size)
|
|
Packit Service |
360c39 |
return 0;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!ip->i_di.di_height && /* stuffed */
|
|
Packit Service |
360c39 |
((start + size) > (sdp->bsize - sizeof(struct gfs_dinode))))
|
|
Packit Service |
360c39 |
unstuff_dinode(ip);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (journaled) {
|
|
Packit Service |
360c39 |
lblock = offset / sdp->sd_jbsize;
|
|
Packit Service |
360c39 |
offset %= sdp->sd_jbsize;
|
|
Packit Service |
360c39 |
} else {
|
|
Packit Service |
360c39 |
lblock = offset >> sdp->sd_sb.sb_bsize_shift;
|
|
Packit Service |
360c39 |
offset &= sdp->bsize - 1;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!ip->i_di.di_height) /* stuffed */
|
|
Packit Service |
360c39 |
offset += sizeof(struct gfs_dinode);
|
|
Packit Service |
360c39 |
else if (journaled)
|
|
Packit Service |
360c39 |
offset += sizeof(struct gfs2_meta_header);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
while (copied < size) {
|
|
Packit Service |
360c39 |
amount = size - copied;
|
|
Packit Service |
360c39 |
if (amount > sdp->bsize - offset)
|
|
Packit Service |
360c39 |
amount = sdp->bsize - offset;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (!extlen){
|
|
Packit Service |
360c39 |
new = TRUE;
|
|
Packit Service |
360c39 |
gfs1_block_map(ip, lblock, &new, &dblock, &extlen, 0);
|
|
Packit Service |
360c39 |
if (!dblock)
|
|
Packit Service |
360c39 |
return -1;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (dblock == ip->i_di.di_num.no_addr)
|
|
Packit Service |
360c39 |
bh = ip->i_bh;
|
|
Packit Service |
360c39 |
else
|
|
Packit Service |
360c39 |
bh = bread(sdp, dblock);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (journaled && dblock != ip->i_di.di_num.no_addr ) {
|
|
Packit Service |
360c39 |
struct gfs2_meta_header mh;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
mh.mh_magic = GFS2_MAGIC;
|
|
Packit Service |
360c39 |
mh.mh_type = GFS2_METATYPE_JD;
|
|
Packit Service |
360c39 |
mh.mh_format = GFS2_FORMAT_JD;
|
|
Packit Service |
360c39 |
gfs2_meta_header_out(&mh, bh->b_data);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
memcpy(bh->b_data + offset, buf + copied, amount);
|
|
Packit Service |
360c39 |
bmodified(bh);
|
|
Packit Service |
360c39 |
if (bh != ip->i_bh)
|
|
Packit Service |
360c39 |
brelse(bh);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
copied += amount;
|
|
Packit Service |
360c39 |
lblock++;
|
|
Packit Service |
360c39 |
dblock++;
|
|
Packit Service |
360c39 |
extlen--;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
offset = (journaled) ? sizeof(struct gfs2_meta_header) : 0;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
if (ip->i_di.di_size < start + copied) {
|
|
Packit Service |
360c39 |
bmodified(ip->i_bh);
|
|
Packit Service |
360c39 |
ip->i_di.di_size = start + copied;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
ip->i_di.di_mtime = ip->i_di.di_ctime = time(NULL);
|
|
Packit Service |
360c39 |
gfs2_dinode_out(&ip->i_di, ip->i_bh->b_data);
|
|
Packit Service |
360c39 |
bmodified(ip->i_bh);
|
|
Packit Service |
360c39 |
return copied;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
/* gfs_dinode_in */
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
static void gfs_dinode_in(struct gfs_dinode *di, struct gfs2_buffer_head *bh)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs_dinode *str = (struct gfs_dinode *)bh->b_data;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
gfs2_meta_header_in(&di->di_header, bh->b_data);
|
|
Packit Service |
360c39 |
gfs2_inum_in(&di->di_num, (char *)&str->di_num);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
di->di_mode = be32_to_cpu(str->di_mode);
|
|
Packit Service |
360c39 |
di->di_uid = be32_to_cpu(str->di_uid);
|
|
Packit Service |
360c39 |
di->di_gid = be32_to_cpu(str->di_gid);
|
|
Packit Service |
360c39 |
di->di_nlink = be32_to_cpu(str->di_nlink);
|
|
Packit Service |
360c39 |
di->di_size = be64_to_cpu(str->di_size);
|
|
Packit Service |
360c39 |
di->di_blocks = be64_to_cpu(str->di_blocks);
|
|
Packit Service |
360c39 |
di->di_atime = be64_to_cpu(str->di_atime);
|
|
Packit Service |
360c39 |
di->di_mtime = be64_to_cpu(str->di_mtime);
|
|
Packit Service |
360c39 |
di->di_ctime = be64_to_cpu(str->di_ctime);
|
|
Packit Service |
360c39 |
di->di_major = be32_to_cpu(str->di_major);
|
|
Packit Service |
360c39 |
di->di_minor = be32_to_cpu(str->di_minor);
|
|
Packit Service |
360c39 |
di->di_goal_dblk = be64_to_cpu(str->di_goal_dblk);
|
|
Packit Service |
360c39 |
di->di_goal_mblk = be64_to_cpu(str->di_goal_mblk);
|
|
Packit Service |
360c39 |
di->di_flags = be32_to_cpu(str->di_flags);
|
|
Packit Service |
360c39 |
di->di_payload_format = be32_to_cpu(str->di_payload_format);
|
|
Packit Service |
360c39 |
di->di_type = be16_to_cpu(str->di_type);
|
|
Packit Service |
360c39 |
di->di_height = be16_to_cpu(str->di_height);
|
|
Packit Service |
360c39 |
di->di_depth = be16_to_cpu(str->di_depth);
|
|
Packit Service |
360c39 |
di->di_entries = be32_to_cpu(str->di_entries);
|
|
Packit Service |
360c39 |
di->di_eattr = be64_to_cpu(str->di_eattr);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
static struct gfs2_inode *__gfs_inode_get(struct gfs2_sbd *sdp,
|
|
Packit Service |
360c39 |
struct gfs2_buffer_head *bh,
|
|
Packit Service |
360c39 |
uint64_t di_addr)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs_dinode gfs1_dinode;
|
|
Packit Service |
360c39 |
struct gfs2_inode *ip;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
ip = calloc(1, sizeof(struct gfs2_inode));
|
|
Packit Service |
360c39 |
if (ip == NULL) {
|
|
Packit Service |
360c39 |
return NULL;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
ip->bh_owned = 0;
|
|
Packit Service |
360c39 |
if (!bh) {
|
|
Packit Service |
360c39 |
bh = bread(sdp, di_addr);
|
|
Packit Service |
360c39 |
ip->bh_owned = 1;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
gfs_dinode_in(&gfs1_dinode, bh);
|
|
Packit Service |
360c39 |
memcpy(&ip->i_di.di_header, &gfs1_dinode.di_header,
|
|
Packit Service |
360c39 |
sizeof(struct gfs2_meta_header));
|
|
Packit Service |
360c39 |
memcpy(&ip->i_di.di_num, &gfs1_dinode.di_num,
|
|
Packit Service |
360c39 |
sizeof(struct gfs2_inum));
|
|
Packit Service |
360c39 |
ip->i_di.di_mode = gfs1_dinode.di_mode;
|
|
Packit Service |
360c39 |
ip->i_di.di_uid = gfs1_dinode.di_uid;
|
|
Packit Service |
360c39 |
ip->i_di.di_gid = gfs1_dinode.di_gid;
|
|
Packit Service |
360c39 |
ip->i_di.di_nlink = gfs1_dinode.di_nlink;
|
|
Packit Service |
360c39 |
ip->i_di.di_size = gfs1_dinode.di_size;
|
|
Packit Service |
360c39 |
ip->i_di.di_blocks = gfs1_dinode.di_blocks;
|
|
Packit Service |
360c39 |
ip->i_di.di_atime = gfs1_dinode.di_atime;
|
|
Packit Service |
360c39 |
ip->i_di.di_mtime = gfs1_dinode.di_mtime;
|
|
Packit Service |
360c39 |
ip->i_di.di_ctime = gfs1_dinode.di_ctime;
|
|
Packit Service |
360c39 |
ip->i_di.di_major = gfs1_dinode.di_major;
|
|
Packit Service |
360c39 |
ip->i_di.di_minor = gfs1_dinode.di_minor;
|
|
Packit Service |
360c39 |
ip->i_di.di_goal_data = gfs1_dinode.di_goal_dblk;
|
|
Packit Service |
360c39 |
ip->i_di.di_goal_meta = gfs1_dinode.di_goal_mblk;
|
|
Packit Service |
360c39 |
ip->i_di.di_flags = gfs1_dinode.di_flags;
|
|
Packit Service |
360c39 |
ip->i_di.di_payload_format = gfs1_dinode.di_payload_format;
|
|
Packit Service |
360c39 |
ip->i_di.__pad1 = gfs1_dinode.di_type;
|
|
Packit Service |
360c39 |
ip->i_di.di_height = gfs1_dinode.di_height;
|
|
Packit Service |
360c39 |
ip->i_di.di_depth = gfs1_dinode.di_depth;
|
|
Packit Service |
360c39 |
ip->i_di.di_entries = gfs1_dinode.di_entries;
|
|
Packit Service |
360c39 |
ip->i_di.di_eattr = gfs1_dinode.di_eattr;
|
|
Packit Service |
360c39 |
ip->i_bh = bh;
|
|
Packit Service |
360c39 |
ip->i_sbd = sdp;
|
|
Packit Service |
360c39 |
return ip;
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
struct gfs2_inode *lgfs2_gfs_inode_get(struct gfs2_sbd *sdp,
|
|
Packit Service |
360c39 |
struct gfs2_buffer_head *bh)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
return __gfs_inode_get(sdp, bh, 0);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
struct gfs2_inode *lgfs2_gfs_inode_read(struct gfs2_sbd *sdp, uint64_t di_addr)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
return __gfs_inode_get(sdp, NULL, di_addr);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
/* gfs_jindex_in - read in a gfs1 jindex structure. */
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
void gfs_jindex_in(struct gfs_jindex *jindex, char *jbuf)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs_jindex *str = (struct gfs_jindex *) jbuf;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
jindex->ji_addr = be64_to_cpu(str->ji_addr);
|
|
Packit Service |
360c39 |
jindex->ji_nsegment = be32_to_cpu(str->ji_nsegment);
|
|
Packit Service |
360c39 |
jindex->ji_pad = be32_to_cpu(str->ji_pad);
|
|
Packit Service |
360c39 |
memcpy(jindex->ji_reserved, str->ji_reserved, 64);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
/* gfs_rgrp_in - Read in a resource group header */
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
void gfs_rgrp_in(struct gfs_rgrp *rgrp, struct gfs2_buffer_head *rbh)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs_rgrp *str = (struct gfs_rgrp *)rbh->b_data;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
gfs2_meta_header_in(&rgrp->rg_header, rbh->b_data);
|
|
Packit Service |
360c39 |
rgrp->rg_flags = be32_to_cpu(str->rg_flags);
|
|
Packit Service |
360c39 |
rgrp->rg_free = be32_to_cpu(str->rg_free);
|
|
Packit Service |
360c39 |
rgrp->rg_useddi = be32_to_cpu(str->rg_useddi);
|
|
Packit Service |
360c39 |
rgrp->rg_freedi = be32_to_cpu(str->rg_freedi);
|
|
Packit Service |
360c39 |
gfs2_inum_in(&rgrp->rg_freedi_list, (char *)&str->rg_freedi_list);
|
|
Packit Service |
360c39 |
rgrp->rg_usedmeta = be32_to_cpu(str->rg_usedmeta);
|
|
Packit Service |
360c39 |
rgrp->rg_freemeta = be32_to_cpu(str->rg_freemeta);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
memcpy(rgrp->rg_reserved, str->rg_reserved, 64);
|
|
Packit Service |
360c39 |
}
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
/* gfs_rgrp_out */
|
|
Packit Service |
360c39 |
/* ------------------------------------------------------------------------ */
|
|
Packit Service |
360c39 |
void gfs_rgrp_out(struct gfs_rgrp *rgrp, struct gfs2_buffer_head *rbh)
|
|
Packit Service |
360c39 |
{
|
|
Packit Service |
360c39 |
struct gfs_rgrp *str = (struct gfs_rgrp *)rbh->b_data;
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
gfs2_meta_header_out(&rgrp->rg_header, rbh->b_data);
|
|
Packit Service |
360c39 |
str->rg_flags = cpu_to_be32(rgrp->rg_flags);
|
|
Packit Service |
360c39 |
str->rg_free = cpu_to_be32(rgrp->rg_free);
|
|
Packit Service |
360c39 |
str->rg_useddi = cpu_to_be32(rgrp->rg_useddi);
|
|
Packit Service |
360c39 |
str->rg_freedi = cpu_to_be32(rgrp->rg_freedi);
|
|
Packit Service |
360c39 |
gfs2_inum_out(&rgrp->rg_freedi_list, (char *)&str->rg_freedi_list);
|
|
Packit Service |
360c39 |
str->rg_usedmeta = cpu_to_be32(rgrp->rg_usedmeta);
|
|
Packit Service |
360c39 |
str->rg_freemeta = cpu_to_be32(rgrp->rg_freemeta);
|
|
Packit Service |
360c39 |
|
|
Packit Service |
360c39 |
memcpy(str->rg_reserved, rgrp->rg_reserved, 64);
|
|
Packit Service |
360c39 |
bmodified(rbh);
|
|
Packit Service |
360c39 |
}
|