From: Eryu Guan Date: Sun, 2 Oct 2016 23:36:14 +0000 (+1100) Subject: libxcmd: fix counting of xfs entries in fs_table_insert X-Git-Tag: v4.8.0-rc3~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=753a71d46f0ff5899169edde517feb3825171ad2;p=thirdparty%2Fxfsprogs-dev.git libxcmd: fix counting of xfs entries in fs_table_insert Commit bb80e3d6cd04 ("libxcmd: populate fs table with xfs entries first, foreign entries last") adds a new counter "xfs_fs_count" and increases the counter when inserting an XFS entry. But it missed a counter when fs_count is zero (inserting the first path) and the entry has no FS_FOREIGN bit set, i.e. the first XFS entry doesn't increase xfs_fs_count. This results in args_command() mess and infinite loop in xfs/244 when testing v4 XFS (xfs/244 notrun on v5 XFS, but this bug still reproduces on v5 XFS). e.g. mkfs -t xfs -f /dev/sda5 mount -o pquota /dev/sda5 /mnt/xfs mkdir /mnt/xfs/project touch /mnt/xfs/project/testfile xfs_quota -x -c "project -s -p /mnt/xfs/project/testfile 1" /dev/sda5 Fix it by increasing xfs_fs_count when flags has no FS_FOREIGN bit. Signed-off-by: Eryu Guan Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner --- diff --git a/libxcmd/paths.c b/libxcmd/paths.c index 3455217c7..97f47cf06 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -147,7 +147,6 @@ fs_table_insert( memmove(&fs_table[xfs_fs_count + 1], &fs_table[xfs_fs_count], sizeof(fs_path_t)*(fs_count - xfs_fs_count)); fs_path = &fs_table[xfs_fs_count]; - xfs_fs_count++; } fs_path->fs_dir = dir; fs_path->fs_prid = prid; @@ -159,6 +158,8 @@ fs_table_insert( fs_path->fs_logdev = logdev; fs_path->fs_rtdev = rtdev; fs_count++; + if (!(flags & FS_FOREIGN)) + xfs_fs_count++; return 0;