linux-nvme.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Guixin Liu <kanie@linux.alibaba.com>
To: hch@lst.de, sagi@grimberg.me, kch@nvidia.com, chaitanyak@nvidia.com
Cc: linux-nvme@lists.infradead.org
Subject: [PATCH V2 0/3] *** Implement the NVMe reservation feature ***
Date: Sun, 14 Jan 2024 17:23:11 +0800	[thread overview]
Message-ID: <20240114092314.63694-1-kanie@linux.alibaba.com> (raw)

Hi guys,
    I've implemented the NVMe reservation feature. Please review it, all 
comments are welcome as usual.

Changes from v1 to v2:
- Implement the reservation notification report, includes registration
preempted, reservation released and reservation preempted.
  And also handle the reservation log page avaliable event and send get
reservation log page command to clear log page at host.

- Put the reservation check access after validate opcode. And remove
opcodes which nvmet not implement yet check.
  Now there is no admin opcode nvmet implemented needs reservation check,
so I dont add reservation check to admin command path.
  Next we need to do reservation check includes the situation of nsid is
0xffffffff at each admin command path, if it is needed.

- Add reservation commands support in nvmet_get_cmd_effects_nvm().

- From Chaitanya, change the local variable tree style to make it cleaner,
and add some comments about NVMe spec.
  And also change others advice from chaitanya.

- Put the nvmet_pr_check_cmd_access and nvmet_parse_pr_cmd into reservation
enable check warp.

- Remove kmem_cache instead to use kmalloc and kfree.

- Change others advice from Sagi.

- Add a blktest test case, this patch will be sent before these series of
pathes.

Advice I dont adopt:
- From Sagi, use rcu instead of rwlock.
  I need protect registrant_list, holder, type and generation simutaneously,
the rcu can not protect multiple units.

- From Sagi, use blkdev's pr_ops if it is exist.
  The backend is unable to distinguish connections from the frontend, If we
use the pr_ops of the block device, the block device's target would only
recognize it as a reservation by the nvme target.
  Could you plz give me more information? Sagi?

- From Keith, use nvmet_get_cmd_effects_nvm to see if a command would violate
a reservation.
  The information is missing in effects, for example the flush command should
be checked, but there is onely a  NVME_CMD_EFFECTS_CSUPP flag in effects, no
LBCC.

Guixin Liu (3):
  nvmet: support reservation feature
  nvmet: unify aer type enum
  nvme: introduce pr_work to handle resv event

 drivers/nvme/host/core.c        |  47 +-
 drivers/nvme/host/nvme.h        |   1 +
 drivers/nvme/target/Makefile    |   2 +-
 drivers/nvme/target/admin-cmd.c |  14 +-
 drivers/nvme/target/configfs.c  |  27 +
 drivers/nvme/target/core.c      |  53 +-
 drivers/nvme/target/discovery.c |   2 +-
 drivers/nvme/target/nvmet.h     |  33 ++
 drivers/nvme/target/pr.c        | 887 ++++++++++++++++++++++++++++++++
 include/linux/nvme.h            |  54 +-
 10 files changed, 1103 insertions(+), 17 deletions(-)
 create mode 100644 drivers/nvme/target/pr.c

-- 
2.43.0



             reply	other threads:[~2024-01-14  9:24 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-14  9:23 Guixin Liu [this message]
2024-01-14  9:23 ` [PATCH V2 1/3] nvmet: support reservation feature Guixin Liu
2024-01-15  9:26   ` Sagi Grimberg
2024-01-16  2:16     ` Guixin Liu
2024-01-14  9:23 ` [PATCH V2 2/3] nvmet: unify aer type enum Guixin Liu
2024-01-15  9:03   ` Sagi Grimberg
2024-01-14  9:23 ` [PATCH V2 3/3] nvme: introduce pr_work to handle resv event Guixin Liu
2024-01-15  8:59   ` Sagi Grimberg
2024-01-16  2:02     ` Guixin Liu
2024-01-16  7:59       ` Sagi Grimberg
2024-01-16  9:57         ` Guixin Liu
2024-01-15  9:51 ` [PATCH V2 0/3] *** Implement the NVMe reservation feature *** Sagi Grimberg
2024-01-16  2:29   ` Guixin Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240114092314.63694-1-kanie@linux.alibaba.com \
    --to=kanie@linux.alibaba.com \
    --cc=chaitanyak@nvidia.com \
    --cc=hch@lst.de \
    --cc=kch@nvidia.com \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).