diff -urN /usr/src/linux-2.4.18-wt2/fs/reiserfs/inode.c linux-2.4.18-wt2/fs/reiserfs/inode.c --- /usr/src/linux-2.4.18-wt2/fs/reiserfs/inode.c Sun Mar 3 23:34:14 2002 +++ linux-2.4.18-wt2/fs/reiserfs/inode.c Sun Mar 3 23:25:53 2002 @@ -1587,7 +1587,7 @@ /* symlink cannot be immutable or append only, right? */ if( S_ISLNK( inode -> i_mode ) ) - inode -> i_flags &= ~ ( S_IMMUTABLE | S_APPEND ); + inode -> i_flags &= ~ ( S_IMMUTABLE_LINK | S_IMMUTABLE_FILE | S_APPEND ); inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; inode->i_size = i_size; @@ -2124,10 +2124,14 @@ inode -> i_flags |= S_SYNC; else inode -> i_flags &= ~S_SYNC; - if( sd_attrs & REISERFS_IMMUTABLE_FL ) - inode -> i_flags |= S_IMMUTABLE; + if( sd_attrs & REISERFS_IMMUTABLE_FILE_FL ) + inode -> i_flags |= S_IMMUTABLE_FILE; else - inode -> i_flags &= ~S_IMMUTABLE; + inode -> i_flags &= ~S_IMMUTABLE_FILE; + if( sd_attrs & REISERFS_IMMUTABLE_LINK_FL ) + inode -> i_flags |= S_IMMUTABLE_LINK; + else + inode -> i_flags &= ~S_IMMUTABLE_LINK; if( sd_attrs & REISERFS_NOATIME_FL ) inode -> i_flags |= S_NOATIME; else @@ -2142,10 +2146,14 @@ void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs ) { if( reiserfs_attrs( inode -> i_sb ) ) { - if( inode -> i_flags & S_IMMUTABLE ) - *sd_attrs |= REISERFS_IMMUTABLE_FL; + if( inode -> i_flags & S_IMMUTABLE_FILE ) + *sd_attrs |= REISERFS_IMMUTABLE_FILE_FL; + else + *sd_attrs &= ~REISERFS_IMMUTABLE_FILE_FL; + if( inode -> i_flags & S_IMMUTABLE_LINK ) + *sd_attrs |= REISERFS_IMMUTABLE_LINK_FL; else - *sd_attrs &= ~REISERFS_IMMUTABLE_FL; + *sd_attrs &= ~REISERFS_IMMUTABLE_LINK_FL; if( inode -> i_flags & S_SYNC ) *sd_attrs |= REISERFS_SYNC_FL; else diff -urN /usr/src/linux-2.4.18-wt2/fs/reiserfs/ioctl.c linux-2.4.18-wt2/fs/reiserfs/ioctl.c --- /usr/src/linux-2.4.18-wt2/fs/reiserfs/ioctl.c Sun Mar 3 22:46:49 2002 +++ linux-2.4.18-wt2/fs/reiserfs/ioctl.c Sun Mar 3 23:31:31 2002 @@ -47,7 +47,7 @@ if (get_user(flags, (int *) arg)) return -EFAULT; - if ( ( flags & REISERFS_IMMUTABLE_FL ) && + if ( ( flags & (REISERFS_IMMUTABLE_LINK_FL | REISERFS_IMMUTABLE_FILE_FL) ) && !capable( CAP_LINUX_IMMUTABLE ) ) return -EPERM; diff -urN /usr/src/linux-2.4.18-wt2/include/linux/reiserfs_fs.h linux-2.4.18-wt2/include/linux/reiserfs_fs.h --- /usr/src/linux-2.4.18-wt2/include/linux/reiserfs_fs.h Sun Mar 3 23:34:14 2002 +++ linux-2.4.18-wt2/include/linux/reiserfs_fs.h Sun Mar 3 23:33:32 2002 @@ -723,7 +723,8 @@ /* 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_IMMUTABLE_FILE_FL EXT2_IMMUTABLE_FILE_FL +#define REISERFS_IMMUTABLE_LINK_FL EXT2_IMMUTABLE_LINK_FL #define REISERFS_SYNC_FL EXT2_SYNC_FL #define REISERFS_NOATIME_FL EXT2_NOATIME_FL #define REISERFS_NODUMP_FL EXT2_NODUMP_FL @@ -739,7 +740,8 @@ #define REISERFS_NOTAIL_FL (0x00008000) /* EXT2_NOTAIL_FL */ /* persistent flags that file inherits from the parent directory */ -#define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ +#define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FILE_FL | \ + REISERFS_IMMUTABLE_LINK_FL | \ REISERFS_SYNC_FL | \ REISERFS_NOATIME_FL | \ REISERFS_NODUMP_FL | \