gfs2: Convert uids and gids between dinodes and vfs inodes.
authorEric W. Biederman <ebiederm@xmission.com>
Fri, 1 Feb 2013 06:08:10 +0000 (22:08 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 13 Feb 2013 14:15:11 +0000 (06:15 -0800)
When reading dinodes from the disk convert uids and gids
into kuids and kgids to store in vfs data structures.

When writing to dinodes to the disk convert kuids and kgids
in the in memory structures into plain uids and gids.

For now all on disk data structures are assumed to be
stored in the initial user namespace.

Cc: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/gfs2/glops.c
fs/gfs2/inode.c
fs/gfs2/super.c

index 78d4184ffc7d496eac9bd7adcef248d3f0a5689c..444b6503ebc404f710aafe371b8b49e100bfba1b 100644 (file)
@@ -322,8 +322,8 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
                break;
        };
 
-       ip->i_inode.i_uid = be32_to_cpu(str->di_uid);
-       ip->i_inode.i_gid = be32_to_cpu(str->di_gid);
+       i_uid_write(&ip->i_inode, be32_to_cpu(str->di_uid));
+       i_gid_write(&ip->i_inode, be32_to_cpu(str->di_gid));
        gfs2_set_nlink(&ip->i_inode, be32_to_cpu(str->di_nlink));
        i_size_write(&ip->i_inode, be64_to_cpu(str->di_size));
        gfs2_set_inode_blocks(&ip->i_inode, be64_to_cpu(str->di_blocks));
index bb7c754f46a2dbcc1339840a4f95b060516b1a1e..b862d114e155b5058a0b8afcceccac1298d8eb0e 100644 (file)
@@ -456,8 +456,8 @@ static void init_dinode(struct gfs2_inode *dip, struct gfs2_inode *ip,
        di->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
        di->di_num.no_addr = cpu_to_be64(ip->i_no_addr);
        di->di_mode = cpu_to_be32(ip->i_inode.i_mode);
-       di->di_uid = cpu_to_be32(ip->i_inode.i_uid);
-       di->di_gid = cpu_to_be32(ip->i_inode.i_gid);
+       di->di_uid = cpu_to_be32(i_uid_read(&ip->i_inode));
+       di->di_gid = cpu_to_be32(i_gid_read(&ip->i_inode));
        di->di_nlink = 0;
        di->di_size = cpu_to_be64(ip->i_inode.i_size);
        di->di_blocks = cpu_to_be64(1);
index 7cc5a605454738566b4d10128d819ab7360ba6d0..a034253765006b882706e6ca3cdc24043b10777e 100644 (file)
@@ -721,8 +721,8 @@ void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
        str->di_num.no_addr = cpu_to_be64(ip->i_no_addr);
        str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
        str->di_mode = cpu_to_be32(ip->i_inode.i_mode);
-       str->di_uid = cpu_to_be32(ip->i_inode.i_uid);
-       str->di_gid = cpu_to_be32(ip->i_inode.i_gid);
+       str->di_uid = cpu_to_be32(i_uid_read(&ip->i_inode));
+       str->di_gid = cpu_to_be32(i_gid_read(&ip->i_inode));
        str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink);
        str->di_size = cpu_to_be64(i_size_read(&ip->i_inode));
        str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));