RE: [PATCH] scsi: ufs-bsg: Remove ufs_bsg_get_query_desc_size function

From: Arthur Simchaev
Date: Sun Jul 17 2022 - 07:28:18 EST


Hi Martin

The bsg driver allows user space to send device management commands.
As such, it is often used by field application engineers to debug various problems, and as a test bed for new features as well.

Let's not bound ourself to hard coded descriptor sizes, as the new Descriptors that supports new features are not defined yet.

Please consider this patch series for kernel v5.20

Regards
Arthur

> -----Original Message-----
> From: Arthur Simchaev <Arthur.Simchaev@xxxxxxx>
> Sent: Monday, June 20, 2022 3:26 PM
> To: James; E.J.Bottomley; jejb@xxxxxxxxxxxxxxxxxx; Martin; K.Petersen;
> martin.petersen@xxxxxxxxxx
> Cc: linux-scsi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Bean; Huo;
> beanhuo@xxxxxxxxxx; Arthur Simchaev <Arthur.Simchaev@xxxxxxx>
> Subject: [PATCH] scsi: ufs-bsg: Remove ufs_bsg_get_query_desc_size function
>
> The bsg driver allows user space to send device management commands.
> As such, it is often used by field application engineers to debug various
> problems,
> and as a test bed for new features as well.
>
> Let's not bound ourself to hard coded descriptor sizes, as the new
> Descriptors that supports new features are not defined yet.
>
> Signed-off-by: Arthur Simchaev <Arthur.Simchaev@xxxxxxx>
> ---
> drivers/scsi/ufs/ufs_bsg.c | 28 ++++------------------------
> 1 file changed, 4 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufs_bsg.c b/drivers/scsi/ufs/ufs_bsg.c
> index 39bf204..7c56eba 100644
> --- a/drivers/scsi/ufs/ufs_bsg.c
> +++ b/drivers/scsi/ufs/ufs_bsg.c
> @@ -6,24 +6,6 @@
> */
> #include "ufs_bsg.h"
>
> -static int ufs_bsg_get_query_desc_size(struct ufs_hba *hba, int *desc_len,
> - struct utp_upiu_query *qr)
> -{
> - int desc_size = be16_to_cpu(qr->length);
> - int desc_id = qr->idn;
> -
> - if (desc_size <= 0)
> - return -EINVAL;
> -
> - ufshcd_map_desc_id_to_length(hba, desc_id, desc_len);
> - if (!*desc_len)
> - return -EINVAL;
> -
> - *desc_len = min_t(int, *desc_len, desc_size);
> -
> - return 0;
> -}
> -
> static int ufs_bsg_verify_query_size(struct ufs_hba *hba,
> unsigned int request_len,
> unsigned int reply_len)
> @@ -52,13 +34,11 @@ static int ufs_bsg_alloc_desc_buffer(struct ufs_hba
> *hba, struct bsg_job *job,
> goto out;
>
> qr = &bsg_request->upiu_req.qr;
> - if (ufs_bsg_get_query_desc_size(hba, desc_len, qr)) {
> - dev_err(hba->dev, "Illegal desc size\n");
> - return -EINVAL;
> - }
> + *desc_len = be16_to_cpu(qr->length);
>
> - if (*desc_len > job->request_payload.payload_len) {
> - dev_err(hba->dev, "Illegal desc size\n");
> + if (*desc_len <= 0 || *desc_len > QUERY_DESC_MAX_SIZE ||
> + *desc_len > job->request_payload.payload_len) {
> + dev_err(hba->dev, "Illegal desc size %d\n", *desc_len);
> return -EINVAL;
> }
>
> --
> 2.7.4