daemon: fstrim: Turn "discard operation is not supported" into ENOTSUP.

Because we run the external fstrim command we don't have access to the
kernel errno when it fails.  However in the case where it prints this
specific error message, turn that into errno ENOTSUP.
This commit is contained in:
Richard W.M. Jones
2016-08-05 12:18:53 +01:00
parent 97b6b4a4eb
commit 116a41d048
2 changed files with 11 additions and 1 deletions

View File

@@ -105,7 +105,13 @@ do_fstrim (const char *path,
r = commandv (&out, &err, argv);
if (r == -1) {
reply_with_error ("%s", err);
/* If the error is about the kernel operation not being supported
* for this filesystem type, then return errno ENOTSUP here.
*/
if (strstr (err, "discard operation is not supported"))
reply_with_error_errno (ENOTSUP, "%s", err);
else
reply_with_error ("%s", err);
return -1;
}

View File

@@ -10851,6 +10851,10 @@ filesystem, the host filesystem, qemu and the host kernel.
If this support isn't present it may give an error or even
appear to run but do nothing.
In the case where the kernel vfs driver does not support
trimming, this call will fail with errno set to C<ENOTSUP>.
Currently this happens when trying to trim FAT filesystems.
See also C<guestfs_zero_free_space>. That is a slightly
different operation that turns free space in the filesystem
into zeroes. It is valid to call C<guestfs_fstrim> either