From: Oleg Drokin This patch fixes a problem in reiserfs' handling of immutable attribute, where every user (not just root) can unset it. Also it adds "append-only" attribute "support" (all the support is in VFS anyway, we only recognise the bit now). Also misleading comment in reiserfs_fs.h is removed. 25-akpm/fs/reiserfs/inode.c | 4 ++++ 25-akpm/fs/reiserfs/ioctl.c | 2 +- 25-akpm/include/linux/reiserfs_fs.h | 9 ++------- 3 files changed, 7 insertions(+), 8 deletions(-) diff -puN fs/reiserfs/inode.c~reiserfs-xattr-fix fs/reiserfs/inode.c --- 25/fs/reiserfs/inode.c~reiserfs-xattr-fix Fri Aug 8 13:06:17 2003 +++ 25-akpm/fs/reiserfs/inode.c Fri Aug 8 13:06:17 2003 @@ -2236,6 +2236,10 @@ void sd_attrs_to_i_attrs( __u16 sd_attrs inode -> i_flags |= S_IMMUTABLE; else inode -> i_flags &= ~S_IMMUTABLE; + if( sd_attrs & REISERFS_APPEND_FL ) + inode -> i_flags |= S_APPEND; + else + inode -> i_flags &= ~S_APPEND; if( sd_attrs & REISERFS_NOATIME_FL ) inode -> i_flags |= S_NOATIME; else diff -puN fs/reiserfs/ioctl.c~reiserfs-xattr-fix fs/reiserfs/ioctl.c --- 25/fs/reiserfs/ioctl.c~reiserfs-xattr-fix Fri Aug 8 13:06:17 2003 +++ 25-akpm/fs/reiserfs/ioctl.c Fri Aug 8 13:06:17 2003 @@ -47,7 +47,7 @@ int reiserfs_ioctl (struct inode * inode if (get_user(flags, (int *) arg)) return -EFAULT; - if ( ( flags & REISERFS_IMMUTABLE_FL ) && + if ( ( ( flags ^ REISERFS_I(inode) -> i_attrs) & ( REISERFS_IMMUTABLE_FL | REISERFS_APPEND_FL)) && !capable( CAP_LINUX_IMMUTABLE ) ) return -EPERM; diff -puN include/linux/reiserfs_fs.h~reiserfs-xattr-fix include/linux/reiserfs_fs.h --- 25/include/linux/reiserfs_fs.h~reiserfs-xattr-fix Fri Aug 8 13:06:17 2003 +++ 25-akpm/include/linux/reiserfs_fs.h Fri Aug 8 13:06:17 2003 @@ -879,19 +879,14 @@ struct stat_data_v1 /* we want common flags to have the same values as in ext2, so chattr(1) will work without problems */ #define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL +#define REISERFS_APPEND_FL EXT2_APPEND_FL #define REISERFS_SYNC_FL EXT2_SYNC_FL #define REISERFS_NOATIME_FL EXT2_NOATIME_FL #define REISERFS_NODUMP_FL EXT2_NODUMP_FL #define REISERFS_SECRM_FL EXT2_SECRM_FL #define REISERFS_UNRM_FL EXT2_UNRM_FL #define REISERFS_COMPR_FL EXT2_COMPR_FL -/* persistent flag to disable tails on per-file basic. - Note, that is inheritable: mark directory with this and - all new files inside will not have tails. - - Teodore Tso allocated EXT2_NODUMP_FL (0x00008000) for this. Change - numeric constant to ext2 macro when available. */ -#define REISERFS_NOTAIL_FL (0x00008000) /* EXT2_NOTAIL_FL */ +#define REISERFS_NOTAIL_FL EXT2_NOTAIL_FL /* persistent flags that file inherits from the parent directory */ #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ _