@ -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 " ;