]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/blkdev: fix BlkDev::get_devid when we got a devname, not fd
authorSage Weil <sage@redhat.com>
Fri, 21 Dec 2018 17:19:38 +0000 (11:19 -0600)
committerSage Weil <sage@redhat.com>
Tue, 1 Jan 2019 16:59:36 +0000 (10:59 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/blkdev.cc

index 48ddbc8781d14d99ee3a53515963818cac49a8c3..be5a223419a236374c84b4914a80ef70b1a011de 100644 (file)
@@ -82,14 +82,20 @@ BlkDev::BlkDev(const std::string& devname)
   : devname(devname)
 {}
 
-int BlkDev::get_devid(dev_t *id) const {
+int BlkDev::get_devid(dev_t *id) const
+{
   struct stat st;
-
-  int r = fstat(fd, &st);
-
-  if (r < 0)
+  int r;
+  if (fd >= 0) {
+    r = fstat(fd, &st);
+  } else {
+    char path[PATH_MAX];
+    snprintf(path, sizeof(path), "/dev/%s", devname.c_str());
+    stat(path, &st);
+  }
+  if (r < 0) {
     return -errno;
-
+  }
   *id = S_ISBLK(st.st_mode) ? st.st_rdev : st.st_dev;
   return 0;
 }