[2.4] reiserfs: fix some issues with extended inode attributes
Hello!
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 it fixes incorrect comment in reiserfs_fs.h file, in fact we do support 't' attribute as "do not pack tail", not 'd' attribute as stated in the comment.
Please pull from bk://namesys.com/bk/reiser3-linux-2.4-attrs-immut-append
Diffstat:
fs/reiserfs/inode.c | 4 ++++ fs/reiserfs/ioctl.c | 2 +- include/linux/reiserfs_fs.h | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-)
Plain text patch:
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.1064 -> 1.1065 # fs/reiserfs/inode.c 1.48 -> 1.49 # fs/reiserfs/ioctl.c 1.6 -> 1.7
# include/linux/reiserfs_fs.h 1.30 -> 1.31
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/08/08 [email protected] 1.1065
# reiserfs: Add support for 'append-only' attribute, fix 'immutable' attribute handling, fix misleading comment # --------------------------------------------
#
fs/reiserfs/inode.c +4 -0
@@ -2181,6 +2181,10 @@ 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
fs/reiserfs/ioctl.c +1 -1
@@ -51,7 +51,7 @@if (get_user (flags, (int *) arg))return -EFAULT ; -if ( ( flags &REISERFS_IMMUTABLE_FL ) && +if ( ( ( flags ^ inode->u.reiserfs_i.i_attrs) & (REISERFS_IMMUTABLE_FL |REISERFS_APPEND_FL )) && !capable (CAP_LINUX_IMMUTABLE ) )return -EPERM ;
include/linux/reiserfs_fs.h +2 -1
@@ -867,6 +867,7 @@/* 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
@@ -877,7 +878,7 @@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 +Teodore Tso allocated EXT2_NOTAIL_FL (0x00008000) for this. Change numeric constant to ext2 macro when available. */ #define REISERFS_NOTAIL_FL (0x00008000)/* EXT2_NOTAIL_FL */