diff options
| author | Subodh Nijsure <[email protected]> | 2014-10-31 13:50:28 -0500 |
|---|---|---|
| committer | Artem Bityutskiy <[email protected]> | 2014-11-07 12:32:22 +0200 |
| commit | a76284e6f89b2ae37d413fe793752257be01765a (patch) | |
| tree | 392297d678f93cba99e06ca4758277fd1bc69291 | |
| parent | b81000b69ae99fdd77246e22ebf762a5dd008c1e (diff) | |
UBIFS: fix a couple bugs in UBIFS xattr length calculation
The journal update function did not work for extended attributes properly,
because extended attribute inodes carry the xattr data, and the size of this
data was not taken into account.
Artem: improved commit message, amended the patch a bit.
Signed-off-by: Subodh Nijsure <[email protected]>
Signed-off-by: Marc Kleine-Budde <[email protected]>
Signed-off-by: Ben Shelton <[email protected]>
Acked-by: Brad Mouring <[email protected]>
Acked-by: Gratian Crisan <[email protected]>
Signed-off-by: Artem Bityutskiy <[email protected]>
| -rw-r--r-- | fs/ubifs/journal.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c index fb166e204441..f6ac3f29323c 100644 --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c @@ -571,7 +571,11 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir, aligned_dlen = ALIGN(dlen, 8); aligned_ilen = ALIGN(ilen, 8); + len = aligned_dlen + aligned_ilen + UBIFS_INO_NODE_SZ; + /* Make sure to also account for extended attributes */ + len += host_ui->data_len; + dent = kmalloc(len, GFP_NOFS); if (!dent) return -ENOMEM; @@ -648,7 +652,8 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir, ino_key_init(c, &ino_key, dir->i_ino); ino_offs += aligned_ilen; - err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, UBIFS_INO_NODE_SZ); + err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, + UBIFS_INO_NODE_SZ + host_ui->data_len); if (err) goto out_ro; |