lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 0292/1095] scsi: nvme-fc: Add new routine nvme_fc_io_getuuid()
    Date
    From: Muneendra Kumar <muneendra.kumar@broadcom.com>

    [ Upstream commit 827fc630e4c8087df5a8e8ee013b686bd6f13736 ]

    Add nvme_fc_io_getuuid() to the nvme-fc transport. The routine is invoked
    by the FC LLDD on a per-I/O request basis. The routine translates from the
    FC-specific request structure to the bio and the cgroup structure in order
    to obtain the FC appid stored in the cgroup structure. If a value is not
    set or a bio is not found, a NULL appid (aka uuid) will be returned to the
    LLDD.

    Link: https://lore.kernel.org/r/20220519123110.17361-2-jsmart2021@gmail.com
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Acked-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Muneendra Kumar <muneendra.kumar@broadcom.com>
    Signed-off-by: James Smart <jsmart2021@gmail.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/nvme/host/fc.c | 18 ++++++++++++++++++
    include/linux/nvme-fc-driver.h | 14 ++++++++++++++
    2 files changed, 32 insertions(+)

    diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
    index 080f85f4105f..05f9da251758 100644
    --- a/drivers/nvme/host/fc.c
    +++ b/drivers/nvme/host/fc.c
    @@ -1899,6 +1899,24 @@ nvme_fc_ctrl_ioerr_work(struct work_struct *work)
    nvme_fc_error_recovery(ctrl, "transport detected io error");
    }

    +/*
    + * nvme_fc_io_getuuid - Routine called to get the appid field
    + * associated with request by the lldd
    + * @req:IO request from nvme fc to driver
    + * Returns: UUID if there is an appid associated with VM or
    + * NULL if the user/libvirt has not set the appid to VM
    + */
    +char *nvme_fc_io_getuuid(struct nvmefc_fcp_req *req)
    +{
    + struct nvme_fc_fcp_op *op = fcp_req_to_fcp_op(req);
    + struct request *rq = op->rq;
    +
    + if (!IS_ENABLED(CONFIG_BLK_CGROUP_FC_APPID) || !rq->bio)
    + return NULL;
    + return blkcg_get_fc_appid(rq->bio);
    +}
    +EXPORT_SYMBOL_GPL(nvme_fc_io_getuuid);
    +
    static void
    nvme_fc_fcpio_done(struct nvmefc_fcp_req *req)
    {
    diff --git a/include/linux/nvme-fc-driver.h b/include/linux/nvme-fc-driver.h
    index 5358a5facdee..fa092b9be2fd 100644
    --- a/include/linux/nvme-fc-driver.h
    +++ b/include/linux/nvme-fc-driver.h
    @@ -564,6 +564,15 @@ int nvme_fc_rcv_ls_req(struct nvme_fc_remote_port *remoteport,
    void *lsreqbuf, u32 lsreqbuf_len);


    +/*
    + * Routine called to get the appid field associated with request by the lldd
    + *
    + * If the return value is NULL : the user/libvirt has not set the appid to VM
    + * If the return value is non-zero: Returns the appid associated with VM
    + *
    + * @req: IO request from nvme fc to driver
    + */
    +char *nvme_fc_io_getuuid(struct nvmefc_fcp_req *req);

    /*
    * *************** LLDD FC-NVME Target/Subsystem API ***************
    @@ -1048,5 +1057,10 @@ int nvmet_fc_rcv_fcp_req(struct nvmet_fc_target_port *tgtport,

    void nvmet_fc_rcv_fcp_abort(struct nvmet_fc_target_port *tgtport,
    struct nvmefc_tgt_fcp_req *fcpreq);
    +/*
    + * add a define, visible to the compiler, that indicates support
    + * for feature. Allows for conditional compilation in LLDDs.
    + */
    +#define NVME_FC_FEAT_UUID 0x0001

    #endif /* _NVME_FC_DRIVER_H */
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-15 22:52    [W:2.786 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site