Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Mar 1998 12:42:03 +1030
From:      Greg Lehey <grog@lemis.com>
To:        FreeBSD Hackers <hackers@FreeBSD.ORG>
Subject:   Can I call scsi_strategy from the bottom half of a driver?
Message-ID:  <19980307124203.50681@freebie.lemis.com>

next in thread | raw e-mail | index | archive | help
I've come up with a rather strange problem: to perform a write in my
RAID 5 driver, I need to first read in all two blocks, exclusive or
the results and the block to be written, and write the block back to
disk.  This should be transparent to the caller.

Normal requests, say a read, are straightforward enough: build
subrequests to read the blocks needed, set the buffer headers to call
an iodone function on completion (B_CALL).  The top half issues all
the requets in parallel, and the iodone function counts down and does
a biodone () on the caller's bp when they're all complete.

There'd be no particular difficulty issuing another VOP_STRATEGY call
from the iodone function, but I seem to recall that the strategy
routine belongs to the top half, and shouldn't be called from the
bottom half.  I've checked the code, and I can't see any reason why
not, but I could well have missed something.  

Could anybody comment?  If I can't call the strategy from the bottom
half, I can't think of a clean way to do it, so I'd appreciate
comments on that too.

Greg




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980307124203.50681>