aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ubifs
diff options
context:
space:
mode:
authorSubodh Nijsure <snijsure@grid-net.com>2014-10-31 14:50:28 -0400
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2014-11-07 05:32:22 -0500
commita76284e6f89b2ae37d413fe793752257be01765a (patch)
tree392297d678f93cba99e06ca4758277fd1bc69291 /fs/ubifs
parentb81000b69ae99fdd77246e22ebf762a5dd008c1e (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 <snijsure@grid-net.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Ben Shelton <ben.shelton@ni.com> Acked-by: Brad Mouring <brad.mouring@ni.com> Acked-by: Gratian Crisan <gratian.crisan@ni.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Diffstat (limited to 'fs/ubifs')
-rw-r--r--fs/ubifs/journal.c7
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,
571 571
572 aligned_dlen = ALIGN(dlen, 8); 572 aligned_dlen = ALIGN(dlen, 8);
573 aligned_ilen = ALIGN(ilen, 8); 573 aligned_ilen = ALIGN(ilen, 8);
574
574 len = aligned_dlen + aligned_ilen + UBIFS_INO_NODE_SZ; 575 len = aligned_dlen + aligned_ilen + UBIFS_INO_NODE_SZ;
576 /* Make sure to also account for extended attributes */
577 len += host_ui->data_len;
578
575 dent = kmalloc(len, GFP_NOFS); 579 dent = kmalloc(len, GFP_NOFS);
576 if (!dent) 580 if (!dent)
577 return -ENOMEM; 581 return -ENOMEM;
@@ -648,7 +652,8 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
648 652
649 ino_key_init(c, &ino_key, dir->i_ino); 653 ino_key_init(c, &ino_key, dir->i_ino);
650 ino_offs += aligned_ilen; 654 ino_offs += aligned_ilen;
651 err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, UBIFS_INO_NODE_SZ); 655 err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs,
656 UBIFS_INO_NODE_SZ + host_ui->data_len);
652 if (err) 657 if (err)
653 goto out_ro; 658 goto out_ro;
654 659