|
@@ -473,8 +473,10 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name,
|
|
|
if (len > F2FS_NAME_LEN)
|
|
|
return -ERANGE;
|
|
|
|
|
|
+ down_read(&F2FS_I(inode)->i_xattr_sem);
|
|
|
error = lookup_all_xattrs(inode, ipage, index, len, name,
|
|
|
&entry, &base_addr);
|
|
|
+ up_read(&F2FS_I(inode)->i_xattr_sem);
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
@@ -503,7 +505,9 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
|
|
|
int error = 0;
|
|
|
size_t rest = buffer_size;
|
|
|
|
|
|
+ down_read(&F2FS_I(inode)->i_xattr_sem);
|
|
|
error = read_all_xattrs(inode, NULL, &base_addr);
|
|
|
+ up_read(&F2FS_I(inode)->i_xattr_sem);
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
@@ -686,7 +690,9 @@ int f2fs_setxattr(struct inode *inode, int index, const char *name,
|
|
|
f2fs_lock_op(sbi);
|
|
|
/* protect xattr_ver */
|
|
|
down_write(&F2FS_I(inode)->i_sem);
|
|
|
+ down_write(&F2FS_I(inode)->i_xattr_sem);
|
|
|
err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags);
|
|
|
+ up_write(&F2FS_I(inode)->i_xattr_sem);
|
|
|
up_write(&F2FS_I(inode)->i_sem);
|
|
|
f2fs_unlock_op(sbi);
|
|
|
|