diff options
author | Steffen Trumtrar | 2020-07-29 10:43:53 +0200 |
---|---|---|
committer | Denys Vlasenko | 2020-10-01 00:31:11 +0200 |
commit | 6561e07460acc5b38af99aa5e80283dc04953eca (patch) | |
tree | c73a8a3194c18fa52b712de4e8b3a304470725b4 /libbb | |
parent | abefc3c276ac2450f756c5232745a145bd14dbdf (diff) | |
download | busybox-6561e07460acc5b38af99aa5e80283dc04953eca.zip busybox-6561e07460acc5b38af99aa5e80283dc04953eca.tar.gz |
mount: support the sizelimit and offset option for loop devices
Starting with linux kernel v5.4 squashfs has a more strict parameter
checking implemented. Unlike util-linux mount, busybox never supported
the sizelimit option but simply forwards it to the kernel.
Since v5.4 mounting will fail with
squashfs: Unknown parameter 'sizelimit'
Support the sizelimit parameter by setting it in the LOOP_SET_STATUS64
structure before handing it to the kernel.
While at it also add support for the offset option, which currently will
always be set to 0.
function old new delta
cut_out_ull_opt - 167 +167
singlemount 1230 1266 +36
set_loop 834 862 +28
losetup_main 479 483 +4
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/0 up/down: 235/0) Total: 235 bytes
Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/loop.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libbb/loop.c b/libbb/loop.c index ada0c76..85b2724 100644 --- a/libbb/loop.c +++ b/libbb/loop.c @@ -102,7 +102,8 @@ int FAST_FUNC get_free_loop(void) * search will re-use an existing loop device already bound to that * file/offset if it finds one. */ -int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offset, unsigned flags) +int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offset, + unsigned long long sizelimit, unsigned flags) { char dev[LOOP_NAMESIZE]; char *try; @@ -185,6 +186,7 @@ int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offse memset(&loopinfo, 0, sizeof(loopinfo)); safe_strncpy((char *)loopinfo.lo_file_name, file, LO_NAME_SIZE); loopinfo.lo_offset = offset; + loopinfo.lo_sizelimit = sizelimit; /* * Used by mount to set LO_FLAGS_AUTOCLEAR. * LO_FLAGS_READ_ONLY is not set because RO is controlled by open type of the file. |