diff mbox series

kpartx: Add -N option to allow specifying a devmapping name

Message ID 20240405002332.442743-1-development@efficientek.com (mailing list archive)
State Not Applicable, archived
Delegated to: christophe varoqui
Headers show
Series kpartx: Add -N option to allow specifying a devmapping name | expand

Commit Message

Glenn Washburn April 5, 2024, 12:23 a.m. UTC
Running `kpartx -a disk.img` will create device names like
`/dev/mapper/loopNpM` where `N` and `M` are positive integers. The issue is
that `loopN` is not known before hand. `losetup -f` can be used to figure
out what the next loop device will be, but the loop device might be taken
by something else between then and when kpartx finds the next loop device.
Add a new option `-N` which takes a string argument that will be used as
the base name of the devmapper device.

Signed-off-by: Glenn Washburn <development@efficientek.com>
---
 kpartx/kpartx.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Martin Wilck April 5, 2024, 4:52 p.m. UTC | #1
On Thu, 2024-04-04 at 19:23 -0500, Glenn Washburn wrote:
> Running `kpartx -a disk.img` will create device names like
> `/dev/mapper/loopNpM` where `N` and `M` are positive integers. The
> issue is
> that `loopN` is not known before hand. `losetup -f` can be used to
> figure
> out what the next loop device will be, but the loop device might be
> taken
> by something else between then and when kpartx finds the next loop
> device.
> Add a new option `-N` which takes a string argument that will be used
> as
> the base name of the devmapper device.
> 
> Signed-off-by: Glenn Washburn <development@efficientek.com>

Thanks for the patch, this looks useful. But you should warn / error
out if "-N" was used with a real block device rather than an image (or,
alternatively, implement using the map basename for block devices,
too). If the image is already loop-mounted, the loop device _is_ known
beforehand; it needs to be clarified and documented how this option
behaves in that case (your commit description refers only to the case
in which the loop device is created by kpartx).

Also, please update the kpartx man page.

Regards,
Martin


> ---
>  kpartx/kpartx.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
> index 46cb76bac678..750b889327e9 100644
> --- a/kpartx/kpartx.c
> +++ b/kpartx/kpartx.c
> @@ -88,7 +88,7 @@ initpts(void)
>  	addpts("ps3", read_ps3_pt);
>  }
>  
> -static char short_opts[] = "rladfgvp:t:snu";
> +static char short_opts[] = "rladfgvp:t:snuN:";
>  
>  /* Used in gpt.c */
>  int force_gpt=0;
> @@ -99,7 +99,7 @@ static int
>  usage(void) {
>  	printf(VERSION_STRING);
>  	printf("Usage:\n");
> -	printf("  kpartx [-a|-d|-u|-l] [-r] [-p] [-f] [-g] [-s|-n]
> [-v] wholedisk\n");
> +	printf("  kpartx [-a|-d|-u|-l] [-r] [-p] [-f] [-g] [-s|-n]
> [-v] [-N name] wholedisk\n");
>  	printf("\t-a add partition devmappings\n");
>  	printf("\t-r devmappings will be readonly\n");
>  	printf("\t-d del partition devmappings\n");
> @@ -111,6 +111,7 @@ usage(void) {
>  	printf("\t-v verbose\n");
>  	printf("\t-n nosync mode. Return before the partitions are
> created\n");
>  	printf("\t-s sync mode (Default). Don't return until the
> partitions are created\n");
> +	printf("\t-N use name as base name for device\n");
>  	return 1;
>  }
>  
> @@ -312,6 +313,9 @@ main(int argc, char **argv){
>  		case 'u':
>  			what = UPDATE;
>  			break;
> +		case 'N':
> +			mapname = optarg;
> +			break;
>  		default:
>  			usage();
>  			exit(1);
diff mbox series

Patch

diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
index 46cb76bac678..750b889327e9 100644
--- a/kpartx/kpartx.c
+++ b/kpartx/kpartx.c
@@ -88,7 +88,7 @@  initpts(void)
 	addpts("ps3", read_ps3_pt);
 }
 
-static char short_opts[] = "rladfgvp:t:snu";
+static char short_opts[] = "rladfgvp:t:snuN:";
 
 /* Used in gpt.c */
 int force_gpt=0;
@@ -99,7 +99,7 @@  static int
 usage(void) {
 	printf(VERSION_STRING);
 	printf("Usage:\n");
-	printf("  kpartx [-a|-d|-u|-l] [-r] [-p] [-f] [-g] [-s|-n] [-v] wholedisk\n");
+	printf("  kpartx [-a|-d|-u|-l] [-r] [-p] [-f] [-g] [-s|-n] [-v] [-N name] wholedisk\n");
 	printf("\t-a add partition devmappings\n");
 	printf("\t-r devmappings will be readonly\n");
 	printf("\t-d del partition devmappings\n");
@@ -111,6 +111,7 @@  usage(void) {
 	printf("\t-v verbose\n");
 	printf("\t-n nosync mode. Return before the partitions are created\n");
 	printf("\t-s sync mode (Default). Don't return until the partitions are created\n");
+	printf("\t-N use name as base name for device\n");
 	return 1;
 }
 
@@ -312,6 +313,9 @@  main(int argc, char **argv){
 		case 'u':
 			what = UPDATE;
 			break;
+		case 'N':
+			mapname = optarg;
+			break;
 		default:
 			usage();
 			exit(1);