[PATCH] Add support for reservations to NVMeoF target
Omri Mann
omri at excelero.com
Wed Aug 30 03:34:26 PDT 2017
I think nvme-cli already supports the reservation related commands
including resv-report
in version 1.1
On Wed, Aug 30, 2017 at 11:28 AM, Christoph Hellwig <hch at infradead.org> wrote:
> On Mon, Aug 28, 2017 at 09:00:20AM +0300, Sagi Grimberg wrote:
>> Hi Omri,
>>
>> First, please follow the format of patch submission as described
>> in: Documentation/process/submitting-patches.rst
>>
>> Second, I would love to see a generic reservations lib so nvmet
>> and LIO can share the same abstraction (with proper callouts
>> in place). But I don't think its a gating issue.
>> Adding Mike to the thread.
>>
>> Third, persistent reservations should survive power loss, which
>> means they need to be logged in a file at least.
>
> Strictly speaking they only need to be persistent depending on the CPTPL
> field in the Reservation Register command, but implementing that is
> mandatory, so yes we'll need it. And I really want it to actually
> do atomic updates, unlike the LIO code which could corrupt its database
> fairly easily.
>
> Bart (added to Cc) did some nice work on a switch and even a DLM
> implementation for SCST, which I'd really like to get into mainline:
>
> https://github.com/bvanassche/scst/blob/master/scst/src/scst_pres.c
> https://github.com/bvanassche/scst/blob/master/scst/src/scst_dlm.c
>
> and I'd love to get some of that code (or at least the ideas) into
> mainline - both for NVMe and possibly also for the existing SCSI
> target.
>
>
>> As for the implementation itself, any reason to choose a rw_lock
>> instead of a rcu protection scheme? Up until now we got the
>> IO path to be lock free and I'm not very enthusiast starting now.
>
> Agreed.
>
>> > index 3b4d47a..4eb4182 100644
>> > --- a/drivers/nvme/target/io-cmd.c
>> > +++ b/drivers/nvme/target/io-cmd.c
>> > @@ -16,6 +16,8 @@
>> > #include <linux/module.h>
>> > #include "nvmet.h"
>> > +#define IEKEY 0x8 /* Ignore Existing Key */
>
> Needs to got to include/linux/nvme.h
>
>> > +static void nvmet_execute_resv_report(struct nvmet_req *req)
>> > +{
>> > + union {
>> > + struct {
>> > + __le32 gen;
>> > + u8 rtype;
>> > + __le16 regctls;
>> > + u16 rsvd2;
>> > + u8 ptpls;
>> > + u8 rsvd14[14];
>> > + } __packed hdr;
>> > + struct {
>> > + __le16 cntlid;
>> > + u8 rcsts;
>> > + u8 rsvd5[5];
>> > + __le64 hostid;
>> > + __le64 rkey;
>> > + } __packed cntrl;
>>
>> These are generic nvme structures, so they should live in
>> nvme protocol header.
>
> Agreed. Also support for the reservation report command in nvme-cli
> would be really nice for debugging.
More information about the Linux-nvme
mailing list