[RFC PATCH 2/2] nvme-core: use macro defination to define dev attr
Hannes Reinecke
hare at suse.de
Mon May 1 23:12:56 PDT 2023
On 4/27/23 10:02, Chaitanya Kulkarni wrote:
> Insated of duplicating the code for dhchap_secret & dhchap_ctrl_secret,
> define a macro to register device attribute to create device attribute
> that will also define store and show helpers.
>
> Signed-off-by: Chaitanya Kulkarni <kch at nvidia.com>
> ---
> drivers/nvme/host/core.c | 71 +++++++++++++++-------------------------
> 1 file changed, 27 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 171ae1f2197a..f619158ea2fc 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -3780,17 +3780,6 @@ static DEVICE_ATTR_RO(dctype);
>
> #ifdef CONFIG_NVME_AUTH
>
> -static ssize_t nvme_ctrl_dhchap_secret_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
> - struct nvmf_ctrl_options *opts = ctrl->opts;
> -
> - if (!opts->dhchap_secret)
> - return sysfs_emit(buf, "none\n");
> - return sysfs_emit(buf, "%s\n", opts->dhchap_secret);
> -}
> -
> static ssize_t nvme_dhchap_secret_store_common(struct nvme_ctrl *ctrl,
> char **dhchap_secret, struct nvme_dhchap_key **orig_key,
> const char *buf, size_t count)
> @@ -3833,40 +3822,34 @@ static ssize_t nvme_dhchap_secret_store_common(struct nvme_ctrl *ctrl,
> return count;
> }
>
> -static ssize_t nvme_ctrl_dhchap_secret_store(struct device *dev,
> - struct device_attribute *attr, const char *buf, size_t count)
> -{
> - struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
> -
> - return nvme_dhchap_secret_store_common(ctrl, &ctrl->opts->dhchap_secret,
> - &ctrl->host_key, buf, count);
> -}
> -
> -static DEVICE_ATTR(dhchap_secret, S_IRUGO | S_IWUSR,
> - nvme_ctrl_dhchap_secret_show, nvme_ctrl_dhchap_secret_store);
> -
> -static ssize_t nvme_ctrl_dhchap_ctrl_secret_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
> - struct nvmf_ctrl_options *opts = ctrl->opts;
> -
> - if (!opts->dhchap_ctrl_secret)
> - return sysfs_emit(buf, "none\n");
> - return sysfs_emit(buf, "%s\n", opts->dhchap_ctrl_secret);
> -}
> -
> -static ssize_t nvme_ctrl_dhchap_ctrl_secret_store(struct device *dev,
> - struct device_attribute *attr, const char *buf, size_t count)
> -{
> - struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
> +#define NVME_AUTH_DEVICE_ATTR(NAME) \
> +static ssize_t nvme_ctrl_##NAME##_show(struct device *dev, \
> + struct device_attribute *attr, char *buf) \
> +{ \
> + struct nvme_ctrl *ctrl = dev_get_drvdata(dev); \
> + struct nvmf_ctrl_options *opts = ctrl->opts; \
> + \
> + if (!opts->NAME) \
> + return sysfs_emit(buf, "none\n"); \
> + return sysfs_emit(buf, "%s\n", opts->NAME); \
> +} \
> + \
> +static ssize_t nvme_ctrl_##NAME##_store(struct device *dev, \
> + struct device_attribute *attr, const char *buf, \
> + size_t count) \
> +{ \
> + struct nvme_ctrl *ctrl = dev_get_drvdata(dev); \
> + \
> + return nvme_dhchap_secret_store_common(ctrl, \
> + &ctrl->opts->NAME, \
> + &ctrl->host_key, buf, count); \
> +} \
> + \
> +static DEVICE_ATTR(NAME, S_IRUGO | S_IWUSR, \
> + nvme_ctrl_##NAME##_show, nvme_ctrl_##NAME##_store); \
>
> - return nvme_dhchap_secret_store_common(ctrl,
> - &ctrl->opts->dhchap_ctrl_secret, &ctrl->ctrl_key, buf,
> - count);
> -}
> -static DEVICE_ATTR(dhchap_ctrl_secret, S_IRUGO | S_IWUSR,
> - nvme_ctrl_dhchap_ctrl_secret_show, nvme_ctrl_dhchap_ctrl_secret_store);
> +NVME_AUTH_DEVICE_ATTR(dhchap_secret);
> +NVME_AUTH_DEVICE_ATTR(dhchap_ctrl_secret);
> #endif
>
> static struct attribute *nvme_dev_attrs[] = {
In principle ok, but obviously depends on the discussion on the first patch.
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare at suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman
More information about the Linux-nvme
mailing list