]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: udevadm settle before unmap
authorSage Weil <sage@inktank.com>
Tue, 19 Feb 2013 04:36:56 +0000 (20:36 -0800)
committerSage Weil <sage@inktank.com>
Tue, 19 Feb 2013 16:44:34 +0000 (08:44 -0800)
udev runs blkid on device close, and other such nonsense that can
make unmap fail with EBUSY.  Settle before we unmap to avoid this if
possible.  See #4183.

Closes: #4186
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Alex Elder <elder@inktank.com>
src/rbd.cc

index d4b2d8b911878c206e43f9998eab54c4d2da1317..02a793bf64ba03e680e22f84d82f92bf25b63ee7 100644 (file)
@@ -1664,6 +1664,18 @@ static int do_kernel_rm(const char *dev)
   if (r < 0)
     return r;
 
+  // let udevadm do its job *before* we try to unmap
+  if (udevadm_settle) {
+    r = system("/sbin/udevadm settle");
+    if (r) {
+      if (r < 0)
+        cerr << "rbd: error executing udevadm as shell command!" << std::endl;
+      else
+        cerr << "rbd: '/sbin/udevadm settle' failed! (" << r << ")" <<std::endl;
+      // ignore the error, though.
+    }
+  }
+
   int fd = open("/sys/bus/rbd/remove", O_WRONLY);
   if (fd < 0) {
     return -errno;