From: Oleg Drokin <green@namesys.com>

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 |	\

_