Whamcloud - gitweb
b=19208 Add ext3_get_inode_flags()
authorPravin Shelar <pravin.shelar@sun.com>
Fri, 2 Apr 2010 17:56:05 +0000 (10:56 -0700)
committerRobert Read <rread@sun.com>
Fri, 2 Apr 2010 17:58:27 +0000 (10:58 -0700)
Expose i_flags to user.
i=rahul
i=fanyong

ldiskfs/kernel_patches/patches/ext3_fix_i_flags.patch [new file with mode: 0644]
ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series

diff --git a/ldiskfs/kernel_patches/patches/ext3_fix_i_flags.patch b/ldiskfs/kernel_patches/patches/ext3_fix_i_flags.patch
new file mode 100644 (file)
index 0000000..044b173
--- /dev/null
@@ -0,0 +1,62 @@
+Index: b/fs/ext3/inode.c
+===================================================================
+--- a/fs/ext3/inode.c
++++ b/fs/ext3/inode.c
+@@ -2676,6 +2676,25 @@ void ext3_set_inode_flags(struct inode *
+               inode->i_flags |= S_DIRSYNC;
+ }
++/* Propagate flags from i_flags to EXT3_I(inode)->i_flags */
++void ext3_get_inode_flags(struct ldiskfs_inode_info *ei)
++{
++        unsigned int flags = ei->vfs_inode.i_flags;
++
++        ei->i_flags &= ~(EXT3_SYNC_FL|EXT3_APPEND_FL|
++                        EXT3_IMMUTABLE_FL|EXT3_NOATIME_FL|EXT3_DIRSYNC_FL);
++        if (flags & S_SYNC)
++                ei->i_flags |= EXT3_SYNC_FL;
++        if (flags & S_APPEND)
++                ei->i_flags |= EXT3_APPEND_FL;
++        if (flags & S_IMMUTABLE)
++                ei->i_flags |= EXT3_IMMUTABLE_FL;
++        if (flags & S_NOATIME)
++                ei->i_flags |= EXT3_NOATIME_FL;
++        if (flags & S_DIRSYNC)
++                ei->i_flags |= EXT3_DIRSYNC_FL;
++}
++
+ void ext3_read_inode(struct inode * inode)
+ {
+       struct ext3_iloc iloc;
+@@ -2841,6 +2860,7 @@ static int ext3_do_update_inode(handle_t
+       if (ei->i_state & EXT3_STATE_NEW)
+               memset(raw_inode, 0, EXT3_SB(inode->i_sb)->s_inode_size);
++      ext3_get_inode_flags(ei);
+       raw_inode->i_mode = cpu_to_le16(inode->i_mode);
+       if(!(test_opt(inode->i_sb, NO_UID32))) {
+               raw_inode->i_uid_low = cpu_to_le16(low_16_bits(inode->i_uid));
+Index: b/fs/ext3/ioctl.c
+===================================================================
+--- a/fs/ext3/ioctl.c
++++ b/fs/ext3/ioctl.c
+@@ -117,6 +117,7 @@ int ext3_ioctl (struct inode * inode, st
+               return rc;
+       }
+       case EXT3_IOC_GETFLAGS:
++              ext3_get_inode_flags(ei);
+               flags = ei->i_flags & EXT3_FL_USER_VISIBLE;
+               return put_user(flags, (int __user *) arg);
+       case EXT3_IOC_SETFLAGS: {
+Index: b/include/linux/ext3_fs.h
+===================================================================
+--- a/include/linux/ext3_fs.h
++++ b/include/linux/ext3_fs.h
+@@ -1092,6 +1092,7 @@ extern int ext3_get_inode_loc(struct ino
+ extern int ext3_can_truncate(struct inode *inode);
+ extern void ext3_truncate (struct inode *);
+ extern void ext3_set_inode_flags(struct inode *);
++extern void ext3_get_inode_flags(struct ldiskfs_inode_info *ei);
+ extern void ext3_set_aops(struct inode *inode);
+ extern int ext3_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
+                      u64 start, u64 len);
index 28e3460..a25cb4d 100644 (file)
@@ -37,3 +37,4 @@ ext3-kill-dx_root.patch
 ext3-fiemap-2.6-rhel5.patch
 ext3-mballoc-pa_free-mismatch.patch
 ext3_data_in_dirent.patch
+ext3_fix_i_flags.patch