diff options
Diffstat (limited to 'fs/reiserfs/xattr.c')
-rw-r--r-- | fs/reiserfs/xattr.c | 36 |
1 files changed, 3 insertions, 33 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index d7808969096..6bc346c160e 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c | |||
@@ -555,11 +555,10 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th, | |||
555 | 555 | ||
556 | reiserfs_write_unlock(inode->i_sb); | 556 | reiserfs_write_unlock(inode->i_sb); |
557 | mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); | 557 | mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); |
558 | down_write(&dentry->d_inode->i_alloc_sem); | 558 | inode_dio_wait(dentry->d_inode); |
559 | reiserfs_write_lock(inode->i_sb); | 559 | reiserfs_write_lock(inode->i_sb); |
560 | 560 | ||
561 | err = reiserfs_setattr(dentry, &newattrs); | 561 | err = reiserfs_setattr(dentry, &newattrs); |
562 | up_write(&dentry->d_inode->i_alloc_sem); | ||
563 | mutex_unlock(&dentry->d_inode->i_mutex); | 562 | mutex_unlock(&dentry->d_inode->i_mutex); |
564 | } else | 563 | } else |
565 | update_ctime(inode); | 564 | update_ctime(inode); |
@@ -868,27 +867,6 @@ out: | |||
868 | return err; | 867 | return err; |
869 | } | 868 | } |
870 | 869 | ||
871 | static int reiserfs_check_acl(struct inode *inode, int mask, unsigned int flags) | ||
872 | { | ||
873 | struct posix_acl *acl; | ||
874 | int error = -EAGAIN; /* do regular unix permission checks by default */ | ||
875 | |||
876 | if (flags & IPERM_FLAG_RCU) | ||
877 | return -ECHILD; | ||
878 | |||
879 | acl = reiserfs_get_acl(inode, ACL_TYPE_ACCESS); | ||
880 | |||
881 | if (acl) { | ||
882 | if (!IS_ERR(acl)) { | ||
883 | error = posix_acl_permission(inode, acl, mask); | ||
884 | posix_acl_release(acl); | ||
885 | } else if (PTR_ERR(acl) != -ENODATA) | ||
886 | error = PTR_ERR(acl); | ||
887 | } | ||
888 | |||
889 | return error; | ||
890 | } | ||
891 | |||
892 | static int create_privroot(struct dentry *dentry) | 870 | static int create_privroot(struct dentry *dentry) |
893 | { | 871 | { |
894 | int err; | 872 | int err; |
@@ -952,7 +930,7 @@ static int xattr_mount_check(struct super_block *s) | |||
952 | return 0; | 930 | return 0; |
953 | } | 931 | } |
954 | 932 | ||
955 | int reiserfs_permission(struct inode *inode, int mask, unsigned int flags) | 933 | int reiserfs_permission(struct inode *inode, int mask) |
956 | { | 934 | { |
957 | /* | 935 | /* |
958 | * We don't do permission checks on the internal objects. | 936 | * We don't do permission checks on the internal objects. |
@@ -961,15 +939,7 @@ int reiserfs_permission(struct inode *inode, int mask, unsigned int flags) | |||
961 | if (IS_PRIVATE(inode)) | 939 | if (IS_PRIVATE(inode)) |
962 | return 0; | 940 | return 0; |
963 | 941 | ||
964 | #ifdef CONFIG_REISERFS_FS_XATTR | 942 | return generic_permission(inode, mask); |
965 | /* | ||
966 | * Stat data v1 doesn't support ACLs. | ||
967 | */ | ||
968 | if (get_inode_sd_version(inode) != STAT_DATA_V1) | ||
969 | return generic_permission(inode, mask, flags, | ||
970 | reiserfs_check_acl); | ||
971 | #endif | ||
972 | return generic_permission(inode, mask, flags, NULL); | ||
973 | } | 943 | } |
974 | 944 | ||
975 | static int xattr_hide_revalidate(struct dentry *dentry, struct nameidata *nd) | 945 | static int xattr_hide_revalidate(struct dentry *dentry, struct nameidata *nd) |