All of lore.kernel.org
 help / color / mirror / Atom feed
* [dm-devel] [PATCH] kpartx: free loop device after listing partitions
@ 2021-02-24  6:05 Benjamin Marzinski
  2021-03-12 15:53 ` Martin Wilck
  0 siblings, 1 reply; 2+ messages in thread
From: Benjamin Marzinski @ 2021-02-24  6:05 UTC (permalink / raw)
  To: Christophe Varoqui; +Cc: device-mapper development, Martin Wilck

If "kpartx -l" is run on a file that doesn't already have a loop device
associated with it, it will create a loop device to run the command.
Starting with da59d15c6 ("Fix loopback file with kpartx -av"), it will
not free the loop device when exitting. This is because it checks if the
the file it stat()ed is a regular file, before freeing the loop device.
However, after da59d15c6, stat() is rerun on the loop device itself, so
the check fails.  There is no need to check this, if loopcreated is
true, then the file will be a kpartx created loop device, and should be
freed.

Also, keep kpartx from printing that the loop device has been removed
at normal verbosity.

Fixes: da59d15c6 ("Fix loopback file with kpartx -av")
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 kpartx/kpartx.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
index 6a7933fa..8ff116b8 100644
--- a/kpartx/kpartx.c
+++ b/kpartx/kpartx.c
@@ -424,7 +424,7 @@ main(int argc, char **argv){
 					fprintf(stderr, "can't del loop : %s\n",
 					       loopdev);
 				r = 1;
-			} else
+			} else if (verbose)
 				fprintf(stderr, "loop deleted : %s\n", loopdev);
 		}
 		goto end;
@@ -668,16 +668,17 @@ main(int argc, char **argv){
 		if (n > 0)
 			break;
 	}
-	if (what == LIST && loopcreated && S_ISREG (buf.st_mode)) {
+	if (what == LIST && loopcreated) {
 		if (fd != -1)
 			close(fd);
 		if (del_loop(device)) {
 			if (verbose)
-				printf("can't del loop : %s\n",
+				fprintf(stderr, "can't del loop : %s\n",
 					device);
 			exit(1);
 		}
-		printf("loop deleted : %s\n", device);
+		if (verbose)
+			fprintf(stderr, "loop deleted : %s\n", device);
 	}
 
 end:
-- 
2.17.2

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [dm-devel] [PATCH] kpartx: free loop device after listing partitions
  2021-02-24  6:05 [dm-devel] [PATCH] kpartx: free loop device after listing partitions Benjamin Marzinski
@ 2021-03-12 15:53 ` Martin Wilck
  0 siblings, 0 replies; 2+ messages in thread
From: Martin Wilck @ 2021-03-12 15:53 UTC (permalink / raw)
  To: bmarzins, christophe.varoqui; +Cc: dm-devel

On Wed, 2021-02-24 at 00:05 -0600, Benjamin Marzinski wrote:
> If "kpartx -l" is run on a file that doesn't already have a loop
> device
> associated with it, it will create a loop device to run the command.
> Starting with da59d15c6 ("Fix loopback file with kpartx -av"), it
> will
> not free the loop device when exitting. This is because it checks if
> the
> the file it stat()ed is a regular file, before freeing the loop
> device.
> However, after da59d15c6, stat() is rerun on the loop device itself,
> so
> the check fails.  There is no need to check this, if loopcreated is
> true, then the file will be a kpartx created loop device, and should
> be
> freed.
> 
> Also, keep kpartx from printing that the loop device has been removed
> at normal verbosity.
> 
> Fixes: da59d15c6 ("Fix loopback file with kpartx -av")
> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>

Reviewed-by: Martin Wilck <mwilck@suse.com>


--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-03-12 16:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-24  6:05 [dm-devel] [PATCH] kpartx: free loop device after listing partitions Benjamin Marzinski
2021-03-12 15:53 ` Martin Wilck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.