From: Matthew Wilcox <matthew@wil.cx>
To: roel kluin <roel.kluin@gmail.com>
Cc: nick.cheng@areca.com.tw,
Andrew Morton <akpm@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
James.Bottomley@suse.de, linux-scsi@vger.kernel.org
Subject: Re: [PATCH] [SCSI] arcmsr: &/| confusion in arcmsr_build_ccb()
Date: Sat, 1 Jan 2011 10:08:54 -0700 [thread overview]
Message-ID: <20110101170854.GB32652@parisc-linux.org> (raw)
In-Reply-To: <4D1F5A17.4010807@gmail.com>
On Sat, Jan 01, 2011 at 05:45:11PM +0100, roel kluin wrote:
> The WRITE_{6,10,12} are defined numbers, so the branch was always taken.
You're right, but even this will basically always set the write flag,
since some bits will be set the same, even for reads. Eg:
#define READ_10 0x28
#define WRITE_10 0x2a
It should instead be:
> + if (pcmd->cmnd[0] == WRITE_6 || pcmd->cmnd[0] == WRITE_10 ||
> + pcmd->cmnd[0] == WRITE_12 ){
That will of course miss other commands which do writes, such as UNMAP
and WRITE_32. So we should do it properly:
if (pcmd->sc_data_direction == DMA_TO_DEVICE)
arcmsr_cdb->Flags |= ARCMSR_CDB_FLAG_WRITE;
I don't have an Areca card to test with.
> Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
> ---
> drivers/scsi/arcmsr/arcmsr_hba.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> See include/scsi/scsi.h:58-123 for
> #define WRITE_6 0x0a
> #define WRITE_10 0x2a
> #define WRITE_12 0xaa
>
> diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
> index 17e3df4..a6e5222 100644
> --- a/drivers/scsi/arcmsr/arcmsr_hba.c
> +++ b/drivers/scsi/arcmsr/arcmsr_hba.c
> @@ -1171,7 +1171,8 @@ static int arcmsr_build_ccb(struct AdapterControlBlock *acb,
> arcmsr_cdb->msgPages = arccdbsize/0x100 + (arccdbsize % 0x100 ? 1 : 0);
> if ( arccdbsize > 256)
> arcmsr_cdb->Flags |= ARCMSR_CDB_FLAG_SGL_BSIZE;
> - if (pcmd->cmnd[0]|WRITE_6 || pcmd->cmnd[0]|WRITE_10 || pcmd->cmnd[0]|WRITE_12 ){
> + if (pcmd->cmnd[0] & WRITE_6 || pcmd->cmnd[0] & WRITE_10 ||
> + pcmd->cmnd[0] & WRITE_12 ){
> arcmsr_cdb->Flags |= ARCMSR_CDB_FLAG_WRITE;
> }
> ccb->arc_cdb_size = arccdbsize;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Matthew Wilcox Intel Open Source Technology Centre
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."
next prev parent reply other threads:[~2011-01-01 17:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-01 16:45 [PATCH] [SCSI] arcmsr: &/| confusion in arcmsr_build_ccb() roel kluin
2011-01-01 17:08 ` Matthew Wilcox [this message]
2011-01-01 17:28 ` Torsten Kaiser
2011-01-01 23:34 ` Matthew Wilcox
2011-01-01 18:40 ` roel kluin
2011-01-03 2:35 ` NickCheng
2011-01-03 5:22 ` Torsten Kaiser
2011-01-03 16:43 ` James Bottomley
2011-01-01 17:12 ` Torsten Kaiser
2011-01-06 9:32 ` Fix the issue of system hangup after commands timeout on ARC-1200(Type_B controller) NickCheng
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=20110101170854.GB32652@parisc-linux.org \
--to=matthew@wil.cx \
--cc=James.Bottomley@suse.de \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=nick.cheng@areca.com.tw \
--cc=roel.kluin@gmail.com \
/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