diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-03-16 16:49:37 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-03-16 16:55:47 +0100 |
commit | ab518eea9c41235a3fcde80f3ea99669eaade621 (patch) | |
tree | 4bd1783e343316fa11c2ade135dbe0b0561689a9 /include | |
parent | 018804204f41e6e60cec536843275f8fdd4d3620 (diff) | |
download | busybox-w32-ab518eea9c41235a3fcde80f3ea99669eaade621.tar.gz busybox-w32-ab518eea9c41235a3fcde80f3ea99669eaade621.tar.bz2 busybox-w32-ab518eea9c41235a3fcde80f3ea99669eaade621.zip |
mount: create loop devices with LO_FLAGS_AUTOCLEAR flag
The "autolooped" mount (mount [-oloop] IMAGE /DIR/DIR)
always creates AUTOCLEARed loopdevs, so that umounting
drops them (and this does not require any code in the
umount userspace).
This happens since circa linux-2.6.25:
commit 96c5865559cee0f9cbc5173f3c949f6ce3525581
Date: Wed Feb 6 01:36:27 2008 -0800
Subject: Allow auto-destruction of loop devices
IOW: in this case, umount does not have to use -d
to drop the loopdev.
The explicit loop mount (mount /dev/loopN /DIR/DIR)
does not do this. In this case, umount without -d
should not drop loopdev.
Unfortunately, bbox umount currently always implies -d,
this probably needs fixing.
function old new delta
set_loop 537 597 +60
singlemount 1101 1138 +37
losetup_main 419 432 +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 110/0) Total: 110 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/libbb.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/include/libbb.h b/include/libbb.h index b054e0559..e97efcb6e 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -1329,10 +1329,15 @@ extern int get_linux_version_code(void) FAST_FUNC; | |||
1329 | 1329 | ||
1330 | extern char *query_loop(const char *device) FAST_FUNC; | 1330 | extern char *query_loop(const char *device) FAST_FUNC; |
1331 | extern int del_loop(const char *device) FAST_FUNC; | 1331 | extern int del_loop(const char *device) FAST_FUNC; |
1332 | /* If *devname is not NULL, use that name, otherwise try to find free one, | 1332 | /* |
1333 | * If *devname is not NULL, use that name, otherwise try to find free one, | ||
1333 | * malloc and return it in *devname. | 1334 | * malloc and return it in *devname. |
1334 | * return value: 1: read-only loopdev was setup, 0: rw, < 0: error */ | 1335 | * return value is the opened fd to the loop device, or < on error |
1335 | extern int set_loop(char **devname, const char *file, unsigned long long offset, int ro) FAST_FUNC; | 1336 | */ |
1337 | extern int set_loop(char **devname, const char *file, unsigned long long offset, unsigned flags) FAST_FUNC; | ||
1338 | /* These constants match linux/loop.h (without BB_ prefix): */ | ||
1339 | #define BB_LO_FLAGS_READ_ONLY 1 | ||
1340 | #define BB_LO_FLAGS_AUTOCLEAR 4 | ||
1336 | 1341 | ||
1337 | /* Like bb_ask below, but asks on stdin with no timeout. */ | 1342 | /* Like bb_ask below, but asks on stdin with no timeout. */ |
1338 | char *bb_ask_stdin(const char * prompt) FAST_FUNC; | 1343 | char *bb_ask_stdin(const char * prompt) FAST_FUNC; |