|
@@ -200,6 +200,7 @@ static int change_xattr(struct ubifs_info *c, struct inode *host,
|
|
|
struct ubifs_inode *host_ui = ubifs_inode(host);
|
|
|
struct ubifs_inode *ui = ubifs_inode(inode);
|
|
|
void *buf = NULL;
|
|
|
+ int old_size;
|
|
|
struct ubifs_budget_req req = { .dirtied_ino = 2,
|
|
|
.dirtied_ino_d = ALIGN(size, 8) + ALIGN(host_ui->data_len, 8) };
|
|
|
|
|
@@ -217,12 +218,13 @@ static int change_xattr(struct ubifs_info *c, struct inode *host,
|
|
|
kfree(ui->data);
|
|
|
ui->data = buf;
|
|
|
inode->i_size = ui->ui_size = size;
|
|
|
+ old_size = ui->data_len;
|
|
|
ui->data_len = size;
|
|
|
mutex_unlock(&ui->ui_mutex);
|
|
|
|
|
|
mutex_lock(&host_ui->ui_mutex);
|
|
|
host->i_ctime = ubifs_current_time(host);
|
|
|
- host_ui->xattr_size -= CALC_XATTR_BYTES(ui->data_len);
|
|
|
+ host_ui->xattr_size -= CALC_XATTR_BYTES(old_size);
|
|
|
host_ui->xattr_size += CALC_XATTR_BYTES(size);
|
|
|
|
|
|
/*
|
|
@@ -241,7 +243,7 @@ static int change_xattr(struct ubifs_info *c, struct inode *host,
|
|
|
|
|
|
out_cancel:
|
|
|
host_ui->xattr_size -= CALC_XATTR_BYTES(size);
|
|
|
- host_ui->xattr_size += CALC_XATTR_BYTES(ui->data_len);
|
|
|
+ host_ui->xattr_size += CALC_XATTR_BYTES(old_size);
|
|
|
mutex_unlock(&host_ui->ui_mutex);
|
|
|
make_bad_inode(inode);
|
|
|
out_free:
|