rbd: switch to strict_strtol for major parsing

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>
This commit is contained in:
Ilya Dryomov 2013-12-13 17:40:52 +02:00
parent 71cefc2927
commit a42130592d

View 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);