Browse Source

lib/loopdev: cosmetic changes to LOOP_CONFIGURE

Signed-off-by: Karel Zak <kzak@redhat.com>
pull/1163/head
Karel Zak 2 years ago
parent
commit
a61955ba1f
  1. 5
      include/loopdev.h
  2. 20
      lib/loopdev.c

5
include/loopdev.h

@ -67,7 +67,10 @@ struct loop_info64 {
};
#ifndef LOOP_CONFIGURE
#define LOOP_CONFIGURE 0x4C0A
/*
* Since Linux v5.8-rc1 (commit 3448914e8cc550ba792d4ccc74471d1ca4293aae)
*/
# define LOOP_CONFIGURE 0x4C0A
struct loop_config {
uint32_t fd;
uint32_t block_size;

20
lib/loopdev.c

@ -1335,32 +1335,33 @@ int loopcxt_setup_device(struct loopdev_cxt *lc)
DBG(SETUP, ul_debugobj(lc, "device open: OK"));
/*
* Atomic way to configure all by one ioctl call
* -- since Linux v5.8-rc1, commit 3448914e8cc550ba792d4ccc74471d1ca4293aae
*/
lc->config.fd = file_fd;
if (ioctl(dev_fd, LOOP_CONFIGURE, &lc->config) < 0) {
rc = -errno;
errsv = errno;
if (errno != EINVAL)
{
if (errno != EINVAL) {
DBG(SETUP, ul_debugobj(lc, "LOOP_CONFIGURE failed: %m"));
goto err;
}
fallback = 1;
}
else
{
} else {
if (lc->blocksize > 0
&& (rc = loopcxt_ioctl_blocksize(lc, lc->blocksize)) < 0) {
errsv = -rc;
goto err;
}
DBG(SETUP, ul_debugobj(lc, "LOOP_CONFIGURE: OK"));
}
/*
* Old deprecated way; first assign backing file FD and then in the
* second step set loop device properties.
*/
if (fallback) {
/*
* Set FD
*/
if (ioctl(dev_fd, LOOP_SET_FD, file_fd) < 0) {
rc = -errno;
errsv = errno;
@ -1382,6 +1383,7 @@ int loopcxt_setup_device(struct loopdev_cxt *lc)
if (again)
xusleep(250000);
} while (again);
if (err) {
rc = -errno;
errsv = errno;

Loading…
Cancel
Save