]> www.infradead.org Git - mtd-utils.git/commitdiff
mkfs.ubifs: Fix xattr nlink value
authorSascha Hauer <s.hauer@pengutronix.de>
Thu, 27 Sep 2018 09:36:43 +0000 (11:36 +0200)
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Tue, 2 Oct 2018 12:01:42 +0000 (14:01 +0200)
The nlink value of a xattr node must always be one, it has nothing to do
with the nlink value of the inode the attribute belongs to.

The bug can be observed when mounting a mkfs.ubifs generated image which
contains xattrs on directories or files with hardlinks to them. When
mounting such an image with chk_fs = 1 it fails with:

UBIFS error (ubi0:0 pid 1833): dbg_check_filesystem: inode 3308 nlink is 3, but calculated nlink is 1

Another bug that can be triggered is an assertion in
ubifs_xattr_remove() which assures that the xattr i_nlink count should
be one when the xattr is removed.

Fixes: 50044ef ("mkfs.ubifs: Add extended attribute support")
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
ubifs-utils/mkfs.ubifs/mkfs.ubifs.c

index 02870870ee99b22d5424c99bb1497c948048c66d..c764a237135f975792ce54091adb78f09604f71b 100644 (file)
@@ -1070,7 +1070,7 @@ static int add_xattr(struct stat *st, ino_t inum, const void *data,
                goto out;
 
        ino->creat_sqnum = cpu_to_le64(creat_sqnum);
-       ino->nlink      = cpu_to_le32(st->st_nlink);
+       ino->nlink      = cpu_to_le32(1);
        /*
         * The time fields are updated assuming the default time granularity
         * of 1 second. To support finer granularities, utime() would be needed.