fix for nvme device path (#4866)
Summary: nvme device path doesn't have "block" as like "nvme/nvme0/nvme0n1" or "nvme/nvme0/nvme0n1/nvme0n1p1". the last directory such as "nvme0n1p1" should be removed if nvme drive is partitioned. Pull Request resolved: https://github.com/facebook/rocksdb/pull/4866 Differential Revision: D13627824 Pulled By: riversand963 fbshipit-source-id: 09ab968f349f3dbb890beea20193f1359b17d317
This commit is contained in:
parent
842cdc11dd
commit
4091597c67
13
env/io_posix.cc
vendored
13
env/io_posix.cc
vendored
@ -83,10 +83,14 @@ size_t GetLogicalBufferSize(int __attribute__((__unused__)) fd) {
|
|||||||
if (!device_dir.empty() && device_dir.back() == '/') {
|
if (!device_dir.empty() && device_dir.back() == '/') {
|
||||||
device_dir.pop_back();
|
device_dir.pop_back();
|
||||||
}
|
}
|
||||||
// NOTE: sda3 does not have a `queue/` subdir, only the parent sda has it.
|
// NOTE: sda3 and nvme0n1p1 do not have a `queue/` subdir, only the parent sda
|
||||||
|
// and nvme0n1 have it.
|
||||||
// $ ls -al '/sys/dev/block/8:3'
|
// $ ls -al '/sys/dev/block/8:3'
|
||||||
// lrwxrwxrwx. 1 root root 0 Jun 26 01:38 /sys/dev/block/8:3 ->
|
// lrwxrwxrwx. 1 root root 0 Jun 26 01:38 /sys/dev/block/8:3 ->
|
||||||
// ../../block/sda/sda3
|
// ../../block/sda/sda3
|
||||||
|
// $ ls -al '/sys/dev/block/259:4'
|
||||||
|
// lrwxrwxrwx 1 root root 0 Jan 31 16:04 /sys/dev/block/259:4 ->
|
||||||
|
// ../../devices/pci0000:17/0000:17:00.0/0000:18:00.0/nvme/nvme0/nvme0n1/nvme0n1p1
|
||||||
size_t parent_end = device_dir.rfind('/', device_dir.length() - 1);
|
size_t parent_end = device_dir.rfind('/', device_dir.length() - 1);
|
||||||
if (parent_end == std::string::npos) {
|
if (parent_end == std::string::npos) {
|
||||||
return kDefaultPageSize;
|
return kDefaultPageSize;
|
||||||
@ -95,8 +99,11 @@ size_t GetLogicalBufferSize(int __attribute__((__unused__)) fd) {
|
|||||||
if (parent_begin == std::string::npos) {
|
if (parent_begin == std::string::npos) {
|
||||||
return kDefaultPageSize;
|
return kDefaultPageSize;
|
||||||
}
|
}
|
||||||
if (device_dir.substr(parent_begin + 1, parent_end - parent_begin - 1) !=
|
std::string parent =
|
||||||
"block") {
|
device_dir.substr(parent_begin + 1, parent_end - parent_begin - 1);
|
||||||
|
std::string child = device_dir.substr(parent_end + 1, std::string::npos);
|
||||||
|
if (parent != "block" &&
|
||||||
|
(child.compare(0, 4, "nvme") || child.find('p') != std::string::npos)) {
|
||||||
device_dir = device_dir.substr(0, parent_end);
|
device_dir = device_dir.substr(0, parent_end);
|
||||||
}
|
}
|
||||||
std::string fname = device_dir + "/queue/logical_block_size";
|
std::string fname = device_dir + "/queue/logical_block_size";
|
||||||
|
Loading…
Reference in New Issue
Block a user