ubifs: Remove ui_mutex in ubifs_xattr_get and change_xattr
Since ubifs_xattr_get and ubifs_xattr_set cannot being executed
parallelly after importing @host_ui->xattr_sem, now we can remove
ui_mutex imported by commit ab92a20bce ("ubifs: make
ubifs_[get|set]xattr atomic").
@xattr_size, @xattr_names and @xattr_cnt can't be out of protection
by @host_ui->mutex yet, they are sill accesed in other places, such as
pack_inode() called by ubifs_write_inode() triggered by page-writeback.
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
committed by
Richard Weinberger
parent
f4e3634a3b
commit
819f9ab430
@@ -208,13 +208,11 @@ static int change_xattr(struct ubifs_info *c, struct inode *host,
|
|||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
mutex_lock(&ui->ui_mutex);
|
|
||||||
kfree(ui->data);
|
kfree(ui->data);
|
||||||
ui->data = buf;
|
ui->data = buf;
|
||||||
inode->i_size = ui->ui_size = size;
|
inode->i_size = ui->ui_size = size;
|
||||||
old_size = ui->data_len;
|
old_size = ui->data_len;
|
||||||
ui->data_len = size;
|
ui->data_len = size;
|
||||||
mutex_unlock(&ui->ui_mutex);
|
|
||||||
|
|
||||||
mutex_lock(&host_ui->ui_mutex);
|
mutex_lock(&host_ui->ui_mutex);
|
||||||
host->i_ctime = current_time(host);
|
host->i_ctime = current_time(host);
|
||||||
@@ -362,7 +360,6 @@ ssize_t ubifs_xattr_get(struct inode *host, const char *name, void *buf,
|
|||||||
ubifs_assert(c, inode->i_size == ui->data_len);
|
ubifs_assert(c, inode->i_size == ui->data_len);
|
||||||
ubifs_assert(c, ubifs_inode(host)->xattr_size > ui->data_len);
|
ubifs_assert(c, ubifs_inode(host)->xattr_size > ui->data_len);
|
||||||
|
|
||||||
mutex_lock(&ui->ui_mutex);
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
/* If @buf is %NULL we are supposed to return the length */
|
/* If @buf is %NULL we are supposed to return the length */
|
||||||
if (ui->data_len > size) {
|
if (ui->data_len > size) {
|
||||||
@@ -375,7 +372,6 @@ ssize_t ubifs_xattr_get(struct inode *host, const char *name, void *buf,
|
|||||||
err = ui->data_len;
|
err = ui->data_len;
|
||||||
|
|
||||||
out_iput:
|
out_iput:
|
||||||
mutex_unlock(&ui->ui_mutex);
|
|
||||||
iput(inode);
|
iput(inode);
|
||||||
out_cleanup:
|
out_cleanup:
|
||||||
up_read(&ubifs_inode(host)->xattr_sem);
|
up_read(&ubifs_inode(host)->xattr_sem);
|
||||||
|
|||||||
Reference in New Issue
Block a user