From d4dfa47158d045c512e7a0b7537e033fa22859a5 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Fri, 1 Jul 2016 17:38:34 +0200 Subject: [PATCH] v2v: fix and implify the internal Convert_linux:discover_modpath First check for the existence of the directory /etc/modprobe.d, in case using a file under it; this also skips all the other checks, since they are not needed at all. Also /etc/modprobe.d exists on recent Linux versions, so let's give priority to the more common methods. When /etc/modprobe.d does not exist, check for the file to edit using a single list of possible files, now in order of priority, where the first find is used without checking further for the rest. Also, make sure all the returned paths are absolute: they are used in Augeas paths later on, so relative paths will not do anything useful. --- v2v/convert_linux.ml | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/v2v/convert_linux.ml b/v2v/convert_linux.ml index cadfbb53d..02968445b 100644 --- a/v2v/convert_linux.ml +++ b/v2v/convert_linux.ml @@ -1219,28 +1219,18 @@ let rec convert ~keep_serial_console (g : G.guestfs) inspect source rcaps = and discover_modpath () = (* Find what /etc/modprobe.conf is called today. *) - let modpath = ref "" in - - (* Note that we're checking in ascending order of preference so - * that the last discovered method will be chosen. - *) - List.iter ( - fun file -> - if g#is_file ~followsymlinks:true file then - modpath := file - ) [ "/etc/conf.modules"; "/etc/modules.conf" ]; - - if g#is_file ~followsymlinks:true "/etc/modprobe.conf" then - modpath := "modprobe.conf"; - - if g#is_dir ~followsymlinks:true "/etc/modprobe.d" then + if g#is_dir ~followsymlinks:true "/etc/modprobe.d" then ( (* Create a new file /etc/modprobe.d/virt-v2v-added.conf. *) - modpath := "modprobe.d/virt-v2v-added.conf"; + "/etc/modprobe.d/virt-v2v-added.conf" + ) else ( + (* List of methods, in order of preference. *) + let paths = [ "/etc/modprobe.conf"; "/etc/modules.conf"; "/etc/conf.modules" ] in - if !modpath = "" then - error (f_"unable to find any valid modprobe configuration file such as /etc/modprobe.conf"); - - !modpath + try + List.find (g#is_file ~followsymlinks:true) paths + with Not_found -> + error (f_"unable to find any valid modprobe configuration file such as /etc/modprobe.conf"); + ) and remap_block_devices block_type = (* This function's job is to iterate over boot configuration