diff options
-rw-r--r-- | sys-utils/fstrim.8 | 3 | ||||
-rw-r--r-- | sys-utils/fstrim.c | 17 |
2 files changed, 19 insertions, 1 deletions
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) { |