[PATCH 6/8] nvme-fabrics: add a generic NVMe over Fabrics library

Sagi Grimberg sagi at grimberg.me
Wed Jun 15 12:16:19 PDT 2016


>> @@ -107,10 +108,19 @@ struct nvme_ctrl {
>>   	u8 event_limit;
>>   	u8 vwc;
>>   	u32 vs;
>> +	u32 sgls;
>>   	bool subsystem;
>>   	unsigned long quirks;
>>   	struct work_struct scan_work;
>>   	struct work_struct async_event_work;
>> +
>> +	/* Fabrics only */
>> +	u16 sqsize;
>> +	u32 ioccsz;
>> +	u32 iorcsz;
>> +	u16 icdoff;
>> +	u16 maxcmd;
>> +	struct nvmf_ctrl_options *opts;
>>   };
>
> The pci only stuff goes in 'struct nvme_dev' and embeds 'struct
> nvme_ctrl', but fabrics gets to use nvme_ctrl directly?
>
> If we need transport specifics for anything, like you have during
> nvme_init_identify, I think we should add function callbacks to
> nvme_ctrl_ops to set up those specifics, then we don't need 'is_fabrics'
> checks.

That's where we started off from :)

But we got to a point where it started getting convoluted for generic
nvme optional features which are mandatory for fabrics (like keep-alive
support) that are detected in different forms (controller identify and
fabric admin connect). Anyway we thought it'd be cleaner to have it
directly in nvme_ctrl and centralize their assignments in a single
location.



More information about the Linux-nvme mailing list