From 410d12e5beb78838fc7c6d47d4c433459dc8b857 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 10 Dec 2018 11:45:03 +0100 Subject: fstrim: trim also root FS on --fstab The root fs ("/") is optional in many case in /etc/fstab. This patch forces fstrim to read kernel command line for the root= option to get root FS if the entry is missing in your fstab. Addresses: https://github.com/karelzak/util-linux/issues/719 Signed-off-by: Karel Zak --- sys-utils/fstrim.8 | 3 ++- sys-utils/fstrim.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'sys-utils') diff --git a/sys-utils/fstrim.8 b/sys-utils/fstrim.8 index ff572a44b..f7e7aa9ef 100644 --- a/sys-utils/fstrim.8 +++ b/sys-utils/fstrim.8 @@ -48,7 +48,8 @@ KB (=1000), MB (=1000*1000), and so on for GB, TB, PB, EB, ZB and YB. .IP "\fB\-A, \-\-fstab\fP" Trim all mounted filesystems mentioned in \fI/etc/fstab\fR on devices that support the -discard operation. +discard operation. The root filesystem is determined from kernel command line if missing +in the file. The other supplied options, like \fB\-\-offset\fR, \fB\-\-length\fR and \fB-\-minimum\fR, are applied to all these devices. Errors from filesystems that do not support the discard operation are silently diff --git a/sys-utils/fstrim.c b/sys-utils/fstrim.c index b1823f5c5..00652cbb1 100644 --- a/sys-utils/fstrim.c +++ b/sys-utils/fstrim.c @@ -242,9 +242,26 @@ static int fstrim_all(struct fstrim_control *ctl) mnt_table_uniq_fs(tab, MNT_UNIQ_FORWARD, uniq_fs_source_cmp); if (ctl->fstab) { + char *rootdev = NULL; + cache = mnt_new_cache(); if (!cache) err(MNT_EX_FAIL, _("failed to initialize libmount cache")); + + /* Make sure we trim also root FS on --fstab */ + if (mnt_table_find_target(tab, "/", MNT_ITER_FORWARD) == NULL && + mnt_guess_system_root(0, cache, &rootdev) == 0) { + + fs = mnt_new_fs(); + if (!fs) + err(MNT_EX_FAIL, _("failed to allocate FS handler")); + mnt_fs_set_target(fs, "/"); + mnt_fs_set_source(fs, rootdev); + mnt_fs_set_fstype(fs, "auto"); + mnt_table_add_fs(tab, fs); + mnt_unref_fs(fs); + fs = NULL; + } } while (mnt_table_next_fs(tab, itr, &fs) == 0) { -- cgit v1.2.3-55-g7522