]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
krbd: create udev_enumerate in enumerate_devices()
authorIlya Dryomov <idryomov@gmail.com>
Thu, 16 Aug 2018 16:49:33 +0000 (18:49 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 31 Aug 2018 14:29:22 +0000 (16:29 +0200)
Make it easier to run more than one scan in a row.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
src/krbd.cc

index 284aa68b79e71475eff1df003d9f094d5a9051a8..d3875f79f6ed8f53261c3026cd39e3b0777120df 100644 (file)
@@ -410,32 +410,43 @@ out_enm:
   return r;
 }
 
-static int enumerate_devices(struct udev_enumerate *enm, const krbd_spec& spec)
+static int enumerate_devices(struct udev *udev, const krbd_spec& spec,
+                             struct udev_enumerate **penm)
 {
+  struct udev_enumerate *enm;
   int r;
 
+  enm = udev_enumerate_new(udev);
+  if (!enm)
+    return -ENOMEM;
+
   r = udev_enumerate_add_match_subsystem(enm, "rbd");
   if (r < 0)
-    return r;
+    goto out_enm;
 
   r = udev_enumerate_add_match_sysattr(enm, "pool", spec.pool_name.c_str());
   if (r < 0)
-    return r;
+    goto out_enm;
 
   r = udev_enumerate_add_match_sysattr(enm, "name", spec.image_name.c_str());
   if (r < 0)
-    return r;
+    goto out_enm;
 
   r = udev_enumerate_add_match_sysattr(enm, "current_snap",
                                        spec.snap_name.c_str());
   if (r < 0)
-    return r;
+    goto out_enm;
 
   r = udev_enumerate_scan_devices(enm);
   if (r < 0)
-    return r;
+    goto out_enm;
 
+  *penm = enm;
   return 0;
+
+out_enm:
+  udev_enumerate_unref(enm);
+  return r;
 }
 
 static int spec_to_devno_and_krbd_id(struct udev *udev, const krbd_spec& spec,
@@ -448,13 +459,9 @@ static int spec_to_devno_and_krbd_id(struct udev *udev, const krbd_spec& spec,
   string err;
   int r;
 
-  enm = udev_enumerate_new(udev);
-  if (!enm)
-    return -ENOMEM;
-
-  r = enumerate_devices(enm, spec);
+  r = enumerate_devices(udev, spec, &enm);
   if (r < 0)
-    goto out_enm;
+    return r;
 
   l = udev_enumerate_get_list_entry(enm);
   if (!l) {
@@ -748,13 +755,9 @@ static int is_mapped_image(struct udev *udev, const krbd_spec& spec,
   struct udev_list_entry *l;
   int r;
 
-  enm = udev_enumerate_new(udev);
-  if (!enm)
-    return -ENOMEM;
-
-  r = enumerate_devices(enm, spec);
+  r = enumerate_devices(udev, spec, &enm);
   if (r < 0)
-    goto out_enm;
+    return r;
 
   l = udev_enumerate_get_list_entry(enm);
   if (l) {