]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/loopdev: cosmetic changes to LOOP_CONFIGURE
authorKarel Zak <kzak@redhat.com>
Mon, 5 Oct 2020 11:49:16 +0000 (13:49 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 5 Oct 2020 12:52:20 +0000 (14:52 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/loopdev.h
lib/loopdev.c

index bcc7bfa735b2a7fa8c6920c1bb6a45d813050e48..6d400d1f3ff7ebb8c1dfb3f90a44435939b8dbc0 100644 (file)
@@ -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;
index 15264b19c172f1ce3145d6763a44db1e82a4220a..2b909084e7d18b31a09fa46d8f88c4aeef335d05 100644 (file)
@@ -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;