Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25 /block/bsg.c

Filename:/block/bsg.c
Lines Added:13
Lines Deleted:2
Also changed in: (Previous) 2.6.25-rc9  2.6.25-rc8  2.6.25-rc7  2.6.25-rc6  2.6.25-rc5  2.6.25-rc4 
(Following) 2.6.25-git1  2.6.25-git2  2.6.25-git3  2.6.25-git4  2.6.25-git5  2.6.25-git6 

Location
[  2.6.25
  [  block
     o  bsg.c

Patch

diff --git a/block/bsg.c b/block/bsg.c
index 8e181ab..8917c51 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -279,6 +279,7 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr)
          goto out;
       }
       rq->next_rq = next_rq;
+      next_rq->cmd_type = rq->cmd_type;
 
       dxferp = (void*)(unsigned long)hdr->din_xferp;
       ret =  blk_rq_map_user(q, next_rq, dxferp, hdr->din_xfer_len);
@@ -445,6 +446,15 @@ static int blk_complete_sgv4_hdr_rq(struct request *rq, struct sg_io_v4 *hdr,
    else
       hdr->dout_resid = rq->data_len;
 
+   /*
+    * If the request generated a negative error number, return it
+    * (providing we aren't already returning an error); if it's
+    * just a protocol response (i.e. non negative), that gets
+    * processed above.
+    */
+   if (!ret && rq->errors < 0)
+      ret = rq->errors;
+
    blk_rq_unmap_user(bio);
    blk_put_request(rq);
 
@@ -837,6 +847,7 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
    struct bsg_device *bd = file->private_data;
    int __user *uarg = (int __user *) arg;
+   int ret;
 
    switch (cmd) {
       /*
@@ -889,12 +900,12 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
       if (rq->next_rq)
          bidi_bio = rq->next_rq->bio;
       blk_execute_rq(bd->queue, NULL, rq, 0);
-      blk_complete_sgv4_hdr_rq(rq, &hdr, bio, bidi_bio);
+      ret = blk_complete_sgv4_hdr_rq(rq, &hdr, bio, bidi_bio);
 
       if (copy_to_user(uarg, &hdr, sizeof(hdr)))
          return -EFAULT;
 
-      return 0;
+      return ret;
    }
    /*
     * block device ioctls


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.