]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Incremental: Close unclosed mdfd in IncrementalScan()
authorMateusz Grzonka <mateusz.grzonka@intel.com>
Wed, 24 Nov 2021 10:45:30 +0000 (11:45 +0100)
committerJes Sorensen <jsorensen@fb.com>
Wed, 24 Nov 2021 12:06:12 +0000 (07:06 -0500)
In addition to closing mdfd, propagate helpers to manage file
descriptors across IncrementalScan().

Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Incremental.c

index cd9cc0fc8bb6437bc156aa04bd0282ed36e919a3..9cdd31f02d2e6d6703f8bb133601a4726fbdd42d 100644 (file)
@@ -1346,7 +1346,7 @@ restart:
                }
                mdfd = open_dev(me->devnm);
 
-               if (mdfd < 0)
+               if (!is_fd_valid(mdfd))
                        continue;
                if (!isdigit(me->metadata[0])) {
                        /* must be a container */
@@ -1356,7 +1356,7 @@ restart:
 
                        if (st && st->ss->load_container)
                                ret = st->ss->load_container(st, mdfd, NULL);
-                       close(mdfd);
+                       close_fd(&mdfd);
                        if (!ret && st && st->ss->container_content) {
                                if (map_lock(&map))
                                        pr_err("failed to get exclusive lock on mapfile\n");
@@ -1368,7 +1368,7 @@ restart:
                        continue;
                }
                if (md_array_active(mdfd)) {
-                       close(mdfd);
+                       close_fd(&mdfd);
                        continue;
                }
                /* Ok, we can try this one.   Maybe it needs a bitmap */
@@ -1385,9 +1385,9 @@ restart:
                        int bmfd;
 
                        bmfd = open(mddev->bitmap_file, O_RDWR);
-                       if (bmfd >= 0) {
+                       if (is_fd_valid(bmfd)) {
                                added = ioctl(mdfd, SET_BITMAP_FILE, bmfd);
-                               close(bmfd);
+                               close_fd(&bmfd);
                        }
                        if (c->verbose >= 0) {
                                if (added == 0)
@@ -1416,6 +1416,7 @@ restart:
                        }
                        sysfs_free(sra);
                }
+               close_fd(&mdfd);
        }
        map_free(mapl);
        return rv;