]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: switch to strict_strtol for major parsing
authorIlya Dryomov <ilya.dryomov@inktank.com>
Fri, 13 Dec 2013 15:40:52 +0000 (17:40 +0200)
committerIlya Dryomov <ilya.dryomov@inktank.com>
Fri, 13 Dec 2013 15:40:52 +0000 (17:40 +0200)
Use common/strict_strtol, which actually parses integers in a proper
way, instead of atoi for parsing /sys/bus/rbd/devices/<id>/major.  This
is important, because the kernel apparently can write things like
"(none)" into that file, and in general is more bulletproof.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
src/rbd.cc

index 9556fb842eae877ce328258a25df9b12fabd9484..a5806b9b4c6930d5448320df8c4e5c4a6bb81160 100644 (file)
@@ -1895,8 +1895,15 @@ static int get_rbd_seq(int major_num, string &seq)
           << cpp_strerror(-r) << std::endl;
       continue;
     }
+    string err;
+    int cur_major = strict_strtol(major, 10, &err);
+    if (!err.empty()) {
+      cerr << err << std::endl;
+      cerr << "rbd: could not parse major number read from " << fn << ": "
+           << cpp_strerror(-r) << std::endl;
+      continue;
+    }
 
-    int cur_major = atoi(major);
     if (cur_major == major_num) {
       seq = string(dent->d_name);
       closedir(device_dir);