All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
To: Tim Chen <tim.c.chen@linux.intel.com>
Cc: James Bottomley <James.Bottomley@suse.de>,
	Andi Kleen <ak@linux.intel.com>,
	linux-scsi <linux-scsi@vger.kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Vasu Dev <vasu.dev@linux.intel.com>,
	Matthew Wilcox <willy@linux.intel.com>,
	Mike Christie <michaelc@cs.wisc.edu>,
	James Smart <james.smart@emulex.com>,
	Andrew Vasquez <andrew.vasquez@qlogic.com>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	Hannes Reinecke <hare@suse.de>, Joe Eykholt <jeykholt@cisco.com>,
	Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH 1/8] scsi: Drop struct Scsi_Host->host_lock around SHT->queuecommand()
Date: Fri, 17 Sep 2010 11:21:36 -0700	[thread overview]
Message-ID: <1284747696.13344.164.camel@haakon2.linux-iscsi.org> (raw)
In-Reply-To: <1284745799.7280.155.camel@schen9-DESK>

On Fri, 2010-09-17 at 10:49 -0700, Tim Chen wrote:
> On Fri, 2010-09-17 at 09:41 -0700, Nicholas A. Bellinger wrote:
> 
> > > > 
> > > > What I was actually thinking of for the atomic is that we'd let it range
> > > > [1..INT_MAX] so a zero was an indicator of no use of this.  Then the
> > > > actual code could become
> > > > 
> > > > if (atomic_read(x)) {
> > > > 	do {
> > > > 		y = atomic_add_return(1, x);
> > > > 	} while (y == 0);
> > > > }
> > > 
> > > The conversion of struct scsi_cmnd->serial_number to atomic_t and the
> > > above code for scsi_cmd_get_serial() sounds perfectly reasonable to me.
> > > 
> > 
> > Actually, that should be the conversion of struct
> > Scsi_Host->cmd_serial_number to an atomic_t.   AFAICT there is no reason
> > for struct scsi_cmnd->serial_number needing to be an atomic_t.
> 
> Just want to verify the hidden assumption we have here when the atomic
> int Scsi_Host->cmd_serial_number counter overflow after increment. The
> counter itself then becomes negative.  We are assuming that when we do
> type conversion back to unsigned long scsi_cmnd->serial_number, we will
> get the right thing.  
> 
> So for 32-bit int, we expect if we start with 0x7fffffff in hex and the
> expected sequence will be
> 
> 	2147483647 (int) -> 2147483647 (unsigned long)  [0x7fffffff]
> 	+1
> 	-2147483648 (int) -> 2147483648 (unsigned long) [0x80000000]
> 	+1
> 	-2147483647 (int) -> 2147483649 (unsigned long) [0x80000001]
> 	
> If there is architecture where the above assumption is not true (which
> I'm not aware of but just checking), then we should manually wrap the
> atomic counter to 1 when counter overflow.  
> 

I was thinking about this as well, but I figured since jejb recommended
it's usage for scsi_cmd_get_serial() that it would not be a problem.
However I am not sure if he had keeping the struct
scsi_cmnd->serial_number a 'unsigned long' that is done in the new v2
patches.

James, is there any other consideration here wrt to atomic_t wrapping
for scsi_cmd_get_serial() using a astruct Scsi_Host->cmd_serial_number
assignment to an 'unsigned long' that I need to include in a v3
series..?

--nab


  reply	other threads:[~2010-09-17 18:25 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-16 22:35 [PATCH 1/8] scsi: Drop struct Scsi_Host->host_lock around SHT->queuecommand() Nicholas A. Bellinger
2010-09-16 22:35 ` Nicholas A. Bellinger
2010-09-17  2:46 ` James Bottomley
2010-09-17  3:02   ` Nicholas A. Bellinger
2010-09-17  3:20   ` Christoph Hellwig
2010-09-17  7:20   ` Andi Kleen
2010-09-17 12:13     ` James Bottomley
2010-09-17 14:22       ` Andi Kleen
2010-09-17 14:57         ` James Bottomley
2010-09-17 16:37           ` Nicholas A. Bellinger
2010-09-17 16:41             ` Nicholas A. Bellinger
2010-09-17 17:49               ` Tim Chen
2010-09-17 18:21                 ` Nicholas A. Bellinger [this message]
2010-09-17 17:24             ` Joe Eykholt

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=1284747696.13344.164.camel@haakon2.linux-iscsi.org \
    --to=nab@linux-iscsi.org \
    --cc=James.Bottomley@suse.de \
    --cc=ak@linux.intel.com \
    --cc=andrew.vasquez@qlogic.com \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=james.smart@emulex.com \
    --cc=jeykholt@cisco.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=tim.c.chen@linux.intel.com \
    --cc=vasu.dev@linux.intel.com \
    --cc=willy@linux.intel.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 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.