Blob Blame History Raw
From e93dd9f2736f84942e1171a61b6f6739c3242f2f Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 5 Aug 2016 12:09:59 +0100
Subject: [PATCH] sparsify: Exit with error code 3 if fstrim is not supported
 by the appliance.

This replaces the indirect exception catching from
commit 931aec5b8846ce63b0e2b6beba5861a019b5f694 with a direct feature
test.

Fixes commit 931aec5b8846ce63b0e2b6beba5861a019b5f694.

(cherry picked from commit 97b6b4a4ebc6f6e333ee448f61e1d6142cfffe27)
---
 sparsify/in_place.ml | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/sparsify/in_place.ml b/sparsify/in_place.ml
index 389ea44..5cd03ef 100644
--- a/sparsify/in_place.ml
+++ b/sparsify/in_place.ml
@@ -29,7 +29,7 @@ open Cmdline
 
 module G = Guestfs
 
-let rec run disk format ignores machine_readable zeroes =
+let run disk format ignores machine_readable zeroes =
   (* Connect to libguestfs. *)
   let g = open_guestfs () in
 
@@ -40,17 +40,6 @@ let rec run disk format ignores machine_readable zeroes =
   Sys.set_signal Sys.sigquit (Sys.Signal_handle set_quit);
   g#set_pgroup true;
 
-  try
-    perform g disk format ignores machine_readable zeroes quit
-  with
-    G.Error msg as exn ->
-      if g#last_errno () = G.Errno.errno_ENOTSUP then (
-        (* for exit code 3, see man page *)
-        error ~exit_code:3 (f_"discard/trim is not supported: %s") msg;
-      )
-      else raise exn
-
-and perform g disk format ignores machine_readable zeroes quit =
   (* XXX Current limitation of the API.  Can remove this hunk in future. *)
   let format =
     match format with
@@ -62,6 +51,12 @@ and perform g disk format ignores machine_readable zeroes quit =
   if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable g;
   g#launch ();
 
+  (* If discard is not supported in the appliance, we must return exit
+   * code 3.  See the man page.
+   *)
+  if not (g#feature_available [|"fstrim"|]) then
+    error ~exit_code:3 (f_"discard/trim is not supported");
+
   (* Discard non-ignored filesystems that we are able to mount, and
    * selected swap partitions.
    *)
-- 
1.8.3.1