From: Stanislav Brabec Date: Wed, 25 Jan 2017 17:30:26 +0000 (+0100) Subject: fstrim: de-duplicate btrfs sub-volumes X-Git-Tag: v2.29.2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fb6ce9b0fb5552b7658f2c8bcdd3c438e30c6626;p=thirdparty%2Futil-linux.git fstrim: de-duplicate btrfs sub-volumes There was a comparison of roots in uniq_fs_source_cmp(). As we care only on device names, comparing roots makes only a little sense, and it breaks on btrfs. As a result, FITRIM ioctl() is called for each subvolume. But by design, only one TRIM is needed for the whole btrfs volume. Remove it to be able to de-duplicate btrfs subvolumes. Fixes opensuse #1020077. Signed-off-by: Stanislav Brabec --- diff --git a/sys-utils/fstrim.c b/sys-utils/fstrim.c index b764b0b330..09c6b49608 100644 --- a/sys-utils/fstrim.c +++ b/sys-utils/fstrim.c @@ -158,23 +158,11 @@ static int uniq_fs_source_cmp( struct libmnt_fs *a, struct libmnt_fs *b) { - int eq; - if (mnt_fs_is_pseudofs(a) || mnt_fs_is_netfs(a) || mnt_fs_is_pseudofs(b) || mnt_fs_is_netfs(b)) return 1; - eq = mnt_fs_streq_srcpath(a, mnt_fs_get_srcpath(b)); - if (eq) { - const char *aroot = mnt_fs_get_root(a), - *broot = mnt_fs_get_root(b); - if (!aroot || !broot) - eq = 0; - else if (strcmp(aroot, broot) != 0) - eq = 0; - } - - return !eq; + return !mnt_fs_streq_srcpath(a, mnt_fs_get_srcpath(b)); } /*