Skip to content

Commit 6c01388

Browse files
author
mayastor-bors
committed
Try #1923:
2 parents 79da7c8 + 5157567 commit 6c01388

File tree

13 files changed

+82
-34
lines changed

13 files changed

+82
-34
lines changed

io-engine-tests/src/error_bdev.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,14 @@ pub fn create_error_bdev(error_device: &str, backing_device: &str) {
1313

1414
unsafe {
1515
// this allows us to create a bdev without its name being a uri
16-
retval = create_aio_bdev(cname.as_ptr(), filename.as_ptr(), 512, false, false)
16+
retval = create_aio_bdev(
17+
cname.as_ptr(),
18+
filename.as_ptr(),
19+
512,
20+
false,
21+
false,
22+
std::ptr::null_mut(),
23+
)
1724
};
1825
assert_eq!(retval, 0);
1926

io-engine/src/bdev/aio.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,16 @@ impl CreateDestroy for Aio {
116116

117117
let cname = CString::new(self.get_name()).unwrap();
118118

119-
let errno =
120-
unsafe { create_aio_bdev(cname.as_ptr(), cname.as_ptr(), self.blk_size, false, false) };
119+
let errno = unsafe {
120+
create_aio_bdev(
121+
cname.as_ptr(),
122+
cname.as_ptr(),
123+
self.blk_size,
124+
false,
125+
false,
126+
std::ptr::null_mut(),
127+
)
128+
};
121129

122130
if errno != 0 {
123131
let err = BdevError::CreateBdevFailed {

io-engine/src/bdev/malloc.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ impl CreateDestroy for Malloc {
203203
md_interleave: false,
204204
dif_type: SPDK_DIF_DISABLE,
205205
dif_is_head_of_md: false,
206+
dif_pi_format: 0,
206207
};
207208

208209
create_malloc_disk(&mut bdev, &opts)

io-engine/src/bdev/nexus/nexus_bdev.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,9 +1339,9 @@ impl<'n> BdevOps for Nexus<'n> {
13391339

13401340
fn io_type_supported(&self, io_type: IoType) -> bool {
13411341
match io_type {
1342+
IoType::NvmeAdmin => false,
13421343
// we always assume the device supports read/write commands
1343-
// allow NVMe Admin as it is needed for local replicas
1344-
IoType::Read | IoType::Write | IoType::NvmeAdmin => true,
1344+
IoType::Read | IoType::Write => true,
13451345
IoType::Flush | IoType::Reset | IoType::Unmap | IoType::WriteZeros => {
13461346
let supported = self.io_is_supported(io_type);
13471347
if !supported {

io-engine/src/bdev/null_bdev.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,16 +156,16 @@ impl CreateDestroy for Null {
156156
let uuid = spdk_rs::Uuid::generate().into_raw();
157157

158158
let cname = self.name.clone().into_cstring();
159-
let opts = spdk_rs::libspdk::spdk_null_bdev_opts {
160-
name: cname.as_ptr(),
161-
uuid: &uuid,
159+
let opts = spdk_rs::libspdk::null_bdev_opts {
160+
name: cname.into_raw(),
161+
uuid,
162162
num_blocks: self.num_blocks,
163163
block_size: self.blk_size,
164164
physical_block_size: 0,
165165
md_size: 0,
166-
md_interleave: false,
167166
dif_type: spdk_rs::libspdk::SPDK_DIF_DISABLE,
168167
dif_is_head_of_md: false,
168+
dif_pi_format: 0,
169169
};
170170

171171
let errno = unsafe {

io-engine/src/bdev/nvme.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use url::Url;
1212
use spdk_rs::{
1313
bdevs::bdev_nvme_delete_async,
1414
ffihelper::copy_str_with_null,
15-
libspdk::{bdev_nvme_create, spdk_nvme_transport_id},
15+
libspdk::{spdk_bdev_nvme_create, spdk_nvme_transport_id},
1616
};
1717

1818
use crate::{
@@ -80,7 +80,7 @@ impl CreateDestroy for NVMe {
8080
let (sender, receiver) = oneshot::channel::<ErrnoResult<()>>();
8181

8282
let errno = unsafe {
83-
bdev_nvme_create(
83+
spdk_bdev_nvme_create(
8484
&mut context.trid,
8585
cname.as_ptr(),
8686
&mut context.names[0],
@@ -89,7 +89,6 @@ impl CreateDestroy for NVMe {
8989
cb_arg(sender),
9090
std::ptr::null_mut(),
9191
std::ptr::null_mut(),
92-
false,
9392
)
9493
};
9594

io-engine/src/bdev/nvmf.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use spdk_rs::{
1414
bdevs::bdev_nvme_delete_async,
1515
ffihelper::copy_str_with_null,
1616
libspdk::{
17-
bdev_nvme_create, spdk_nvme_transport_id, SPDK_NVME_IO_FLAGS_PRCHK_GUARD,
17+
spdk_bdev_nvme_create, spdk_nvme_transport_id, SPDK_NVME_IO_FLAGS_PRCHK_GUARD,
1818
SPDK_NVME_IO_FLAGS_PRCHK_REFTAG, SPDK_NVME_TRANSPORT_TCP, SPDK_NVMF_ADRFAM_IPV4,
1919
},
2020
};
@@ -150,7 +150,7 @@ impl CreateDestroy for Nvmf {
150150
let (sender, receiver) = oneshot::channel::<ErrnoResult<usize>>();
151151

152152
let errno = unsafe {
153-
bdev_nvme_create(
153+
spdk_bdev_nvme_create(
154154
&mut context.trid,
155155
cname.as_ptr(),
156156
&mut context.names[0],
@@ -159,7 +159,6 @@ impl CreateDestroy for Nvmf {
159159
cb_arg(sender),
160160
std::ptr::null_mut(), // context.prchk_flags,
161161
std::ptr::null_mut(),
162-
false,
163162
)
164163
};
165164

io-engine/src/bdev/nvmx/controller_inner.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,11 +363,16 @@ impl NvmeController<'_> {
363363
// Check Controller Fatal Status for non-admin commands only to avoid
364364
// endless command resubmission in case of disconnected qpair.
365365
if !qpair.is_null()
366-
&& spdk_ctrlr.check_cfs()
366+
// Commenting out CFS check for now as it blocks when there is a total communication loss
367+
// to the controller, where admin commands time out as well.
368+
// We started taking this path of IO qpair timeout after upstream commit:
369+
// https://github.com/spdk/spdk/commit/8f9167af6f87b3c95cbc32798c47129e382e981f
370+
//&& spdk_ctrlr.check_cfs()
371+
&& timeout_action != DeviceTimeoutAction::Ignore
367372
&& timeout_action != DeviceTimeoutAction::HotRemove
368373
{
369374
error!(
370-
"{}: controller Fatal Status set, reset required",
375+
"{}: controller IO qpair timeout, reset required",
371376
timeout_cfg.name
372377
);
373378
timeout_action = DeviceTimeoutAction::Reset;

io-engine/src/lvs/lvs_store.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use spdk_rs::libspdk::{
1515
spdk_bs_total_data_cluster_count, spdk_lvol, spdk_lvol_opts, spdk_lvol_opts_init,
1616
spdk_lvol_store, spdk_lvs_grow_live, vbdev_get_lvol_store_by_name,
1717
vbdev_get_lvol_store_by_uuid, vbdev_get_lvs_bdev_by_lvs, vbdev_lvol_create_with_opts,
18-
vbdev_lvs_create, vbdev_lvs_create_with_uuid, vbdev_lvs_destruct, vbdev_lvs_import,
18+
vbdev_lvs_create_ext, vbdev_lvs_create_with_uuid, vbdev_lvs_destruct, vbdev_lvs_import,
1919
vbdev_lvs_unload, LVOL_CLEAR_WITH_NONE, LVOL_CLEAR_WITH_UNMAP, LVS_CLEAR_WITH_NONE,
2020
};
2121
use url::Url;
@@ -517,11 +517,12 @@ impl Lvs {
517517
// acceptable.
518518
LVS_CLEAR_WITH_NONE,
519519
mdp_ratio,
520+
0,
520521
Some(Self::lvs_cb),
521522
cb_arg(sender),
522523
)
523524
} else {
524-
vbdev_lvs_create(
525+
vbdev_lvs_create_ext(
525526
bdev_name.as_ptr(),
526527
pool_name.as_ptr(),
527528
cluster_size,
@@ -533,6 +534,7 @@ impl Lvs {
533534
// acceptable.
534535
LVS_CLEAR_WITH_NONE,
535536
mdp_ratio,
537+
0,
536538
Some(Self::lvs_cb),
537539
cb_arg(sender),
538540
)

io-engine/src/subsys/config/opts.rs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ use serde::{Deserialize, Serialize};
88
use spdk_rs::{
99
ffihelper::copy_str_with_null,
1010
libspdk::{
11-
bdev_nvme_get_opts, bdev_nvme_set_opts, spdk_bdev_get_opts, spdk_bdev_nvme_opts,
11+
spdk_bdev_get_opts, spdk_bdev_nvme_get_opts, spdk_bdev_nvme_opts, spdk_bdev_nvme_set_opts,
1212
spdk_bdev_opts, spdk_bdev_set_opts, spdk_iobuf_get_opts, spdk_iobuf_opts,
1313
spdk_iobuf_set_opts, spdk_nvmf_target_opts, spdk_nvmf_transport_opts,
14-
spdk_sock_impl_get_opts, spdk_sock_impl_opts, spdk_sock_impl_set_opts,
14+
spdk_sock_impl_get_opts, spdk_sock_impl_opts, spdk_sock_impl_set_opts, NVMF_DEFAULT_KAS,
15+
NVMF_DEFAULT_MIN_KATO,
1516
},
1617
struct_size_init,
1718
};
@@ -314,7 +315,9 @@ impl From<NvmfTransportOpts> for spdk_nvmf_transport_opts {
314315
num_shared_buffers: o.num_shared_buf,
315316
buf_cache_size: o.buf_cache_size,
316317
dif_insert_or_strip: o.dif_insert_or_strip,
317-
reserved29: Default::default(),
318+
// todo: add disable_command_passthru in NvmfTransportOpts when needed.
319+
disable_command_passthru: false,
320+
reserved30: Default::default(),
318321
abort_timeout_sec: o.abort_timeout_sec,
319322
association_timeout: 120000,
320323
transport_specific: std::ptr::null(),
@@ -323,6 +326,9 @@ impl From<NvmfTransportOpts> for spdk_nvmf_transport_opts {
323326
reserved61: Default::default(),
324327
ack_timeout: o.ack_timeout,
325328
data_wr_pool_size: o.data_wr_pool_size,
329+
// todo: add min_kato and kas in NvmfTransportOpts when needed.
330+
min_kato: NVMF_DEFAULT_MIN_KATO,
331+
kas: NVMF_DEFAULT_KAS as u16,
326332
},
327333
opts_size
328334
)
@@ -381,14 +387,19 @@ pub struct NvmeBdevOpts {
381387
impl GetOpts for NvmeBdevOpts {
382388
fn get(&self) -> Self {
383389
let opts: spdk_bdev_nvme_opts = unsafe { zeroed() };
384-
unsafe { bdev_nvme_get_opts(&opts as *const _ as *mut spdk_bdev_nvme_opts) };
390+
unsafe {
391+
spdk_bdev_nvme_get_opts(
392+
&opts as *const _ as *mut spdk_bdev_nvme_opts,
393+
size_of::<spdk_bdev_nvme_opts>() as u64,
394+
)
395+
};
385396
opts.into()
386397
}
387398

388399
fn set(&self) -> bool {
389400
let opts = Box::new(self.into());
390401
debug!("{:?}", &opts);
391-
if unsafe { bdev_nvme_set_opts(Box::into_raw(opts)) } != 0 {
402+
if unsafe { spdk_bdev_nvme_set_opts(Box::into_raw(opts)) } != 0 {
392403
warn!("Failed to apply NVMe Bdev options");
393404
return false;
394405
}
@@ -466,6 +477,7 @@ impl From<spdk_bdev_nvme_opts> for NvmeBdevOpts {
466477
impl From<&NvmeBdevOpts> for spdk_bdev_nvme_opts {
467478
fn from(o: &NvmeBdevOpts) -> Self {
468479
Self {
480+
opts_size: std::mem::size_of::<spdk_bdev_nvme_opts>() as u64,
469481
action_on_timeout: o.action_on_timeout,
470482
timeout_us: o.timeout_us,
471483
timeout_admin_us: o.timeout_admin_us,
@@ -479,6 +491,7 @@ impl From<&NvmeBdevOpts> for spdk_bdev_nvme_opts {
479491
nvme_ioq_poll_period_us: o.nvme_ioq_poll_period_us,
480492
io_queue_requests: o.io_queue_requests,
481493
delay_cmd_submit: o.delay_cmd_submit,
494+
reserved73: Default::default(),
482495
bdev_retry_count: o.bdev_retry_count,
483496
transport_ack_timeout: o.transport_ack_timeout,
484497
ctrlr_loss_timeout_sec: o.ctrlr_loss_timeout_sec,
@@ -490,11 +503,16 @@ impl From<&NvmeBdevOpts> for spdk_bdev_nvme_opts {
490503
nvme_error_stat: false,
491504
rdma_srq_size: 0,
492505
io_path_stat: false,
506+
reserved99: Default::default(),
493507
allow_accel_sequence: false,
494508
rdma_max_cq_size: 0,
495509
rdma_cm_event_timeout_ms: 0,
510+
reserved110: Default::default(),
496511
dhchap_digests: 0,
497512
dhchap_dhgroups: 0,
513+
rdma_umr_per_io: false,
514+
reserved121: Default::default(),
515+
tcp_connect_timeout_ms: 0,
498516
}
499517
}
500518
}
@@ -708,6 +726,8 @@ pub struct IoBufOpts {
708726
pub small_bufsize: u32,
709727
/// Size of a single large buffer.
710728
pub large_bufsize: u32,
729+
/// Enable per-NUMA node buffer pools.
730+
pub enable_numa: bool,
711731
}
712732

713733
impl GetOpts for IoBufOpts {
@@ -718,6 +738,7 @@ impl GetOpts for IoBufOpts {
718738
large_pool_count: 0,
719739
small_bufsize: 0,
720740
large_bufsize: 0,
741+
enable_numa: 0,
721742
},
722743
opts_size
723744
);
@@ -742,6 +763,7 @@ impl Default for IoBufOpts {
742763
large_pool_count: try_from_env("IOBUF_LARGE_POOL_COUNT", 2048),
743764
small_bufsize: try_from_env("IOBUF_SMALL_BUFSIZE", 8 * 1024),
744765
large_bufsize: try_from_env("IOBUF_LARGE_BUFSIZE", 132 * 1024),
766+
enable_numa: try_from_env("IOBUF_ENABLE_NUMA", false),
745767
}
746768
}
747769
}
@@ -753,6 +775,7 @@ impl From<spdk_iobuf_opts> for IoBufOpts {
753775
large_pool_count: o.large_pool_count,
754776
small_bufsize: o.small_bufsize,
755777
large_bufsize: o.large_bufsize,
778+
enable_numa: o.enable_numa != 0,
756779
}
757780
}
758781
}
@@ -765,6 +788,7 @@ impl From<&IoBufOpts> for spdk_iobuf_opts {
765788
large_pool_count: o.large_pool_count,
766789
small_bufsize: o.small_bufsize,
767790
large_bufsize: o.large_bufsize,
791+
enable_numa: o.enable_numa as u8,
768792
},
769793
opts_size
770794
)

0 commit comments

Comments
 (0)