Re: [EXT4 set 2][PATCH 1/5] cleanups: Propagate some i_flags to disk

2007-07-10 Thread Andrew Morton
On Sun, 01 Jul 2007 03:36:12 -0400
Mingming Cao [EMAIL PROTECTED] wrote:

 Propagate flags such as S_APPEND, S_IMMUTABLE, etc. from i_flags into
 ext4-specific i_flags. Hence, when someone sets these flags via a different
 interface than ioctl, they are stored correctly.
 

This changelog is inadequate.  I had to hunt down the equivalent ext3
patch's changelog to understand the reasons for this change.  Please update
this patch's changelog using the below: 

ext3: copy i_flags to inode flags on write

A patch that stores inode flags such as S_IMMUTABLE, S_APPEND, etc.  from
i_flags to EXT3_I(inode)-i_flags when inode is written to disk.  The same
thing is done on GETFLAGS ioctl.

Quota code changes these flags on quota files (to make it harder for
sysadmin to screw himself) and these changes were not correctly propagated
into the filesystem (especially, lsattr did not show them and users were
wondering...).

Propagate flags such as S_APPEND, S_IMMUTABLE, etc.  from i_flags into
ext3-specific i_flags.  Hence, when someone sets these flags via a
different interface than ioctl, they are stored correctly.

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[EXT4 set 2][PATCH 1/5] cleanups: Propagate some i_flags to disk

2007-07-01 Thread Mingming Cao
Propagate flags such as S_APPEND, S_IMMUTABLE, etc. from i_flags into
ext4-specific i_flags. Hence, when someone sets these flags via a different
interface than ioctl, they are stored correctly.

Signed-off-by: Jan Kara [EMAIL PROTECTED]
Signed-off-by: Mingming Cao [EMAIL PROTECTED]

Index: linux-2.6.22-rc4/fs/ext4/inode.c
===
--- linux-2.6.22-rc4.orig/fs/ext4/inode.c   2007-06-11 17:24:01.0 
-0700
+++ linux-2.6.22-rc4/fs/ext4/inode.c2007-06-11 17:24:28.0 -0700
@@ -2583,6 +2583,25 @@
inode-i_flags |= S_DIRSYNC;
 }
 
+/* Propagate flags from i_flags to EXT4_I(inode)-i_flags */
+void ext4_get_inode_flags(struct ext4_inode_info *ei)
+{
+   unsigned int flags = ei-vfs_inode.i_flags;
+
+   ei-i_flags = ~(EXT4_SYNC_FL|EXT4_APPEND_FL|
+   EXT4_IMMUTABLE_FL|EXT4_NOATIME_FL|EXT4_DIRSYNC_FL);
+   if (flags  S_SYNC)
+   ei-i_flags |= EXT4_SYNC_FL;
+   if (flags  S_APPEND)
+   ei-i_flags |= EXT4_APPEND_FL;
+   if (flags  S_IMMUTABLE)
+   ei-i_flags |= EXT4_IMMUTABLE_FL;
+   if (flags  S_NOATIME)
+   ei-i_flags |= EXT4_NOATIME_FL;
+   if (flags  S_DIRSYNC)
+   ei-i_flags |= EXT4_DIRSYNC_FL;
+}
+
 void ext4_read_inode(struct inode * inode)
 {
struct ext4_iloc iloc;
@@ -2742,6 +2761,7 @@
if (ei-i_state  EXT4_STATE_NEW)
memset(raw_inode, 0, EXT4_SB(inode-i_sb)-s_inode_size);
 
+   ext4_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: linux-2.6.22-rc4/fs/ext4/ioctl.c
===
--- linux-2.6.22-rc4.orig/fs/ext4/ioctl.c   2007-06-11 17:24:01.0 
-0700
+++ linux-2.6.22-rc4/fs/ext4/ioctl.c2007-06-11 17:25:11.0 -0700
@@ -28,6 +28,7 @@
 
switch (cmd) {
case EXT4_IOC_GETFLAGS:
+   ext4_get_inode_flags(ei);
flags = ei-i_flags  EXT4_FL_USER_VISIBLE;
return put_user(flags, (int __user *) arg);
case EXT4_IOC_SETFLAGS: {
Index: linux-2.6.22-rc4/include/linux/ext4_fs.h
===
--- linux-2.6.22-rc4.orig/include/linux/ext4_fs.h   2007-06-11 
17:24:01.0 -0700
+++ linux-2.6.22-rc4/include/linux/ext4_fs.h2007-06-11 17:24:28.0 
-0700
@@ -862,6 +862,7 @@
 extern int ext4_get_inode_loc(struct inode *, struct ext4_iloc *);
 extern void ext4_truncate (struct inode *);
 extern void ext4_set_inode_flags(struct inode *);
+extern void ext4_get_inode_flags(struct ext4_inode_info *);
 extern void ext4_set_aops(struct inode *inode);
 extern int ext4_writepage_trans_blocks(struct inode *);
 extern int ext4_block_truncate_page(handle_t *handle, struct page *page,


-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html