Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP5:Update
util-linux-systemd.3448
util-linux-losetup-Add-support-for-setting-logi...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File util-linux-losetup-Add-support-for-setting-logical-blocksize.patch of Package util-linux-systemd.3448
Index: util-linux-2.28/include/loopdev.h =================================================================== --- util-linux-2.28.orig/include/loopdev.h +++ util-linux-2.28/include/loopdev.h @@ -41,6 +41,7 @@ enum { LO_FLAGS_AUTOCLEAR = 4, /* kernel >= 2.6.25 */ LO_FLAGS_PARTSCAN = 8, /* kernel >= 3.2 */ LO_FLAGS_DIRECT_IO = 16, /* kernel >= 4.2 */ + LO_FLAGS_BLOCKSIZE = 32, /* Tentative */ }; #define LO_NAME_SIZE 64 @@ -120,7 +121,8 @@ enum { LOOPDEV_FL_NOIOCTL = (1 << 6), LOOPDEV_FL_DEVSUBDIR = (1 << 7), LOOPDEV_FL_CONTROL = (1 << 8), /* system with /dev/loop-control */ - LOOPDEV_FL_SIZELIMIT = (1 << 9) + LOOPDEV_FL_SIZELIMIT = (1 << 9), + LOOPDEV_FL_BLOCKSIZE = (1 << 10) }; /* @@ -172,6 +174,7 @@ int loopcxt_set_offset(struct loopdev_cx int loopcxt_set_sizelimit(struct loopdev_cxt *lc, uint64_t sizelimit); int loopcxt_set_flags(struct loopdev_cxt *lc, uint32_t flags); int loopcxt_set_backing_file(struct loopdev_cxt *lc, const char *filename); +int loopcxt_set_blocksize(struct loopdev_cxt *lc, uint64_t blocksize); extern char *loopcxt_get_backing_file(struct loopdev_cxt *lc); extern int loopcxt_get_backing_devno(struct loopdev_cxt *lc, dev_t *devno); Index: util-linux-2.28/lib/loopdev.c =================================================================== --- util-linux-2.28.orig/lib/loopdev.c +++ util-linux-2.28/lib/loopdev.c @@ -1103,6 +1103,26 @@ int loopcxt_set_backing_file(struct loop } /* + * @lc: context + * @blocksize: logical blocksize for the device + * + * The setting is removed by loopcxt_set_device() loopcxt_next()! + * + * Returns: 0 on success, <0 on error. + */ +int loopcxt_set_blocksize(struct loopdev_cxt *lc, uint64_t blocksize) +{ + if (!lc) + return -EINVAL; + + lc->info.lo_init[0] = blocksize; + lc->info.lo_flags |= LO_FLAGS_BLOCKSIZE; + + DBG(CXT, ul_debugobj(lc, "set blocksize=%llu", (long long unsigned int)lc->info.lo_init[0])); + return 0; +} + +/* * In kernels prior to v3.9, if the offset or sizelimit options * are used, the block device's size won't be synced automatically. * blockdev --getsize64 and filesystems will use the backing Index: util-linux-2.28/sys-utils/losetup.c =================================================================== --- util-linux-2.28.orig/sys-utils/losetup.c +++ util-linux-2.28/sys-utils/losetup.c @@ -397,6 +397,7 @@ static void usage(FILE *out) fputs(_(" -o, --offset <num> start at offset <num> into file\n"), out); fputs(_(" --sizelimit <num> device is limited to <num> bytes of the file\n"), out); + fputs(_(" -L, --logical-blocksize <size> set the logical block size to <size>\n"), out); fputs(_(" -P, --partscan create a partitioned loop device\n"), out); fputs(_(" -r, --read-only set up a read-only loop device\n"), out); fputs(_(" --direct-io[=<on|off>] open backing file with O_DIRECT\n"), out); @@ -449,7 +450,7 @@ int main(int argc, char **argv) struct loopdev_cxt lc; int act = 0, flags = 0, c; char *file = NULL; - uint64_t offset = 0, sizelimit = 0; + uint64_t offset = 0, sizelimit = 0, blocksize = 0; int res = 0, showdev = 0, lo_flags = 0; char *outarg = NULL; int list = 0; @@ -471,6 +472,7 @@ int main(int argc, char **argv) { "associated", 1, 0, 'j' }, { "json", 0, 0, 'J' }, { "list", 0, 0, 'l' }, + { "logical-blocksize", 1, 0, 'L' }, { "noheadings", 0, 0, 'n' }, { "offset", 1, 0, 'o' }, { "output", 1, 0, 'O' }, @@ -502,7 +504,7 @@ int main(int argc, char **argv) if (loopcxt_init(&lc, 0)) err(EXIT_FAILURE, _("failed to initialize loopcxt")); - while ((c = getopt_long(argc, argv, "ac:d:Dfhj:Jlno:O:PrvV", + while ((c = getopt_long(argc, argv, "ac:d:Dfhj:JlL:no:O:PrvV", longopts, NULL)) != -1) { err_exclusive_options(c, longopts, excl, excl_st); @@ -544,6 +546,10 @@ int main(int argc, char **argv) act = A_SHOW; file = optarg; break; + case 'L': + blocksize = strtosize_or_err(optarg, _("failed to parse logical block size")); + flags |= LOOPDEV_FL_BLOCKSIZE; + break; case 'l': list = 1; break; @@ -692,6 +698,8 @@ int main(int argc, char **argv) loopcxt_set_offset(&lc, offset); if (flags & LOOPDEV_FL_SIZELIMIT) loopcxt_set_sizelimit(&lc, sizelimit); + if (flags & LOOPDEV_FL_BLOCKSIZE) + loopcxt_set_blocksize(&lc, blocksize); if (lo_flags) loopcxt_set_flags(&lc, lo_flags); if ((res = loopcxt_set_backing_file(&lc, file))) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor