From: Pravin Shelar Date: Fri, 2 Apr 2010 17:56:05 +0000 (-0700) Subject: b=19208 Add ext3_get_inode_flags() X-Git-Tag: 1.10.0.39~3 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=d288bab0577044db79ab168c9d90ec2e12daeb45 b=19208 Add ext3_get_inode_flags() Expose i_flags to user. i=rahul i=fanyong --- 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 index 0000000..044b173 --- /dev/null +++ b/ldiskfs/kernel_patches/patches/ext3_fix_i_flags.patch @@ -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); diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series index 28e3460..a25cb4d 100644 --- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series +++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series @@ -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