From: Christoph Hellwig <hch@infradead.org>
To: Douglas Gilbert <dgilbert@interlog.com>
Cc: SCSI development list <linux-scsi@vger.kernel.org>,
Christoph Hellwig <hch@infradead.org>,
Dan Carpenter <dan.carpenter@oracle.com>,
Hannes Reinecke <hare@suse.de>
Subject: Re: [PATCH] scsi_debug: fix compare and write errors
Date: Wed, 3 Dec 2014 01:30:08 -0800 [thread overview]
Message-ID: <20141203093008.GA17698@infradead.org> (raw)
In-Reply-To: <547611A9.2040208@interlog.com>
Any chance to get a review for this one and Dougs other scsi_debug
patch?
On Wed, Nov 26, 2014 at 12:45:13PM -0500, Douglas Gilbert wrote:
> From: Douglas Gilbert <dgilbert@interlog.com>
> Date: Wed, 26 Nov 2014 12:33:48 -0500
> Subject: [PATCH] scsi_debug fix compare and write errors
>
> Kernel build tools pointed out a memory leak so that has been
> fixed and its error paths strengthened with a goto. Testing
> showed compare and write was only working for lba=0; correcting
> the length of the LBA field fixed that.
> ---
> drivers/scsi/scsi_debug.c | 31 ++++++++++++++++---------------
> 1 file changed, 16 insertions(+), 15 deletions(-)
>
> Signed-off-by: Douglas Gilbert <dgilbert@interlog.com>
> >From 699d7b799ebbc0e1b5bc905ccfd50dc77003a9e8 Mon Sep 17 00:00:00 2001
> From: Douglas Gilbert <dgilbert@interlog.com>
> Date: Wed, 26 Nov 2014 12:33:48 -0500
> Subject: [PATCH] scsi_debug fix compare and write errors
>
> Kernel build tools pointed out a memory leak so that has been
> fixed and its error paths strengthened with a goto. Testing
> showed compare and write was only working for lba=0; correcting
> the length of the LBA field fixed that.
> ---
> drivers/scsi/scsi_debug.c | 31 ++++++++++++++++---------------
> 1 file changed, 16 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
> index aa4b6b8..747c691 100644
> --- a/drivers/scsi/scsi_debug.c
> +++ b/drivers/scsi/scsi_debug.c
> @@ -3045,18 +3045,12 @@ resp_comp_write(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
> u8 num;
> unsigned long iflags;
> int ret;
> + int retval = 0;
>
> - lba = get_unaligned_be32(cmd + 2);
> + lba = get_unaligned_be64(cmd + 2);
> num = cmd[13]; /* 1 to a maximum of 255 logical blocks */
> if (0 == num)
> return 0; /* degenerate case, not an error */
> - dnum = 2 * num;
> - arr = kzalloc(dnum * lb_size, GFP_ATOMIC);
> - if (NULL == arr) {
> - mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
> - INSUFF_RES_ASCQ);
> - return check_condition_result;
> - }
> if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
> (cmd[1] & 0xe0)) {
> mk_sense_invalid_opcode(scp);
> @@ -3079,6 +3073,13 @@ resp_comp_write(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
> mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
> return check_condition_result;
> }
> + dnum = 2 * num;
> + arr = kzalloc(dnum * lb_size, GFP_ATOMIC);
> + if (NULL == arr) {
> + mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
> + INSUFF_RES_ASCQ);
> + return check_condition_result;
> + }
>
> write_lock_irqsave(&atomic_rw, iflags);
>
> @@ -3089,24 +3090,24 @@ resp_comp_write(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
> ret = do_device_access(scp, 0, dnum, true);
> fake_storep = fake_storep_hold;
> if (ret == -1) {
> - write_unlock_irqrestore(&atomic_rw, iflags);
> - kfree(arr);
> - return DID_ERROR << 16;
> + retval = DID_ERROR << 16;
> + goto cleanup;
> } else if ((ret < (dnum * lb_size)) &&
> (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
> sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
> "indicated=%u, IO sent=%d bytes\n", my_name,
> dnum * lb_size, ret);
> if (!comp_write_worker(lba, num, arr)) {
> - write_unlock_irqrestore(&atomic_rw, iflags);
> - kfree(arr);
> mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
> - return check_condition_result;
> + retval = check_condition_result;
> + goto cleanup;
> }
> if (scsi_debug_lbp())
> map_region(lba, num);
> +cleanup:
> write_unlock_irqrestore(&atomic_rw, iflags);
> - return 0;
> + kfree(arr);
> + return retval;
> }
>
> struct unmap_block_desc {
> --
> 1.9.1
>
---end quoted text---
next prev parent reply other threads:[~2014-12-03 9:30 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-26 17:45 [PATCH] scsi_debug: fix compare and write errors Douglas Gilbert
2014-12-03 9:30 ` Christoph Hellwig [this message]
2014-12-04 16:43 ` Ewan Milne
2014-12-15 13:44 ` Christoph Hellwig
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=20141203093008.GA17698@infradead.org \
--to=hch@infradead.org \
--cc=dan.carpenter@oracle.com \
--cc=dgilbert@interlog.com \
--cc=hare@suse.de \
--cc=linux-scsi@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.