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-ab518eea9c41235a3fcde80f3ea99669eaade621.tar.gz |
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; extern char *query_loop(const char *device) FAST_FUNC; extern int del_loop(const char *device) FAST_FUNC; -/* If *devname is not NULL, use that name, otherwise try to find free one, +/* + * If *devname is not NULL, use that name, otherwise try to find free one, * malloc and return it in *devname. - * return value: 1: read-only loopdev was setup, 0: rw, < 0: error */ -extern int set_loop(char **devname, const char *file, unsigned long long offset, int ro) FAST_FUNC; + * return value is the opened fd to the loop device, or < on error + */ +extern int set_loop(char **devname, const char *file, unsigned long long offset, unsigned flags) FAST_FUNC; +/* These constants match linux/loop.h (without BB_ prefix): */ +#define BB_LO_FLAGS_READ_ONLY 1 +#define BB_LO_FLAGS_AUTOCLEAR 4 /* Like bb_ask below, but asks on stdin with no timeout. */ char *bb_ask_stdin(const char * prompt) FAST_FUNC; |