Chris Youb
2006-Aug-24  20:41 UTC
[Xen-devel] block ring interface: nr_segments = 0 results in BLKIF_RSP_ERROR
I am currently developing a blkfront.c for a custom OS over Xen 3.0.2-2. 
Typical I/O is working, however, I ran into an error while testing a corner
case.
   
  On standard I/O, where  { 1 <= nr_segments <
BLKIF_MAX_SEGMENTS_PER_REQUEST } blkif_int()''s bret->status returns
BLKIF_RSP_OKAY.
   
  Yet when { nr_segments == 0 } blkif_int''s bret->status is
non-zero. (Yes I realize this is an I/O call of zero-length.)
   
  I checked the documentation and section "8.2.2 Block ring interface"
states the following but doesn''t exclude 0:
   
  "nr_segments
       number of segments for scatter / gather IO described by this
request"
   
  1) Is it possible there is a problem w/ my front-end driver (ie does anyone
else see this behaviour)?
   
  2) If this is back-end related, shouldn''t it just return
BLKIF_RSP_OKAY?
 		
---------------------------------
Now you can have a huge leap forward in email: get the new Yahoo! Mail. 
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Andrew Warfield
2006-Aug-24  22:00 UTC
Re: [Xen-devel] block ring interface: nr_segments = 0 results in BLKIF_RSP_ERROR
See dispatch_rw_block_io in blkback.c:
	/* Check that number of segments is sane. */
	nseg = req->nr_segments;
	if (unlikely(nseg == 0) ||
	    unlikely(nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) {
		DPRINTK("Bad number of segments in request (%d)\n", nseg);
		goto fail_response;
	}
Why is it important that the backend report that a request for
zero-length i/o is okay?
a.
On 8/24/06, Chris Youb <chris_youb@yahoo.ca>
wrote:>
> I am currently developing a blkfront.c for a custom OS over Xen 3.0.2-2.
> Typical I/O is working, however, I ran into an error while testing a corner
> case.
>
> On standard I/O, where  { 1 <= nr_segments <
BLKIF_MAX_SEGMENTS_PER_REQUEST
> } blkif_int()''s bret->status returns BLKIF_RSP_OKAY.
>
> Yet when { nr_segments == 0 } blkif_int''s bret->status is
non-zero. (Yes I
> realize this is an I/O call of zero-length.)
>
> I checked the documentation and section "8.2.2 Block ring
interface" states
> the following but doesn''t exclude 0:
>
> "nr_segments
>      number of segments for scatter / gather IO described by this
request"
>
> 1) Is it possible there is a problem w/ my front-end driver (ie does anyone
> else see this behaviour)?
>
> 2) If this is back-end related, shouldn''t it just return
BLKIF_RSP_OKAY?
>
>
>  ________________________________
> Now you can have a huge leap forward in email: get the new Yahoo! Mail.
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Reasonably Related Threads
- [PATCH V4 0/3] xen-blkfront/blkback discard support
- [RFC v1 3/5] VBD: enlarge max segment per request in blkfront
- [PATCH] Persistent grant maps for xen blk drivers
- [PATCH] blktap: ensure vma->vm_mm''s mmap_sem is being held whenever it is being modified
- [PATCH] xen-blk: persistent-grants fixes