diff options
Diffstat (limited to 'drivers/block/nbd.c')
-rw-r--r-- | drivers/block/nbd.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 4d6de4f15ccb..5d23ffad7c77 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
@@ -110,7 +110,7 @@ static void nbd_end_request(struct request *req) | |||
110 | req, error ? "failed" : "done"); | 110 | req, error ? "failed" : "done"); |
111 | 111 | ||
112 | spin_lock_irqsave(q->queue_lock, flags); | 112 | spin_lock_irqsave(q->queue_lock, flags); |
113 | __blk_end_request(req, error, req->nr_sectors << 9); | 113 | __blk_end_request_all(req, error); |
114 | spin_unlock_irqrestore(q->queue_lock, flags); | 114 | spin_unlock_irqrestore(q->queue_lock, flags); |
115 | } | 115 | } |
116 | 116 | ||
@@ -231,19 +231,19 @@ static int nbd_send_req(struct nbd_device *lo, struct request *req) | |||
231 | { | 231 | { |
232 | int result, flags; | 232 | int result, flags; |
233 | struct nbd_request request; | 233 | struct nbd_request request; |
234 | unsigned long size = req->nr_sectors << 9; | 234 | unsigned long size = blk_rq_bytes(req); |
235 | 235 | ||
236 | request.magic = htonl(NBD_REQUEST_MAGIC); | 236 | request.magic = htonl(NBD_REQUEST_MAGIC); |
237 | request.type = htonl(nbd_cmd(req)); | 237 | request.type = htonl(nbd_cmd(req)); |
238 | request.from = cpu_to_be64((u64) req->sector << 9); | 238 | request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9); |
239 | request.len = htonl(size); | 239 | request.len = htonl(size); |
240 | memcpy(request.handle, &req, sizeof(req)); | 240 | memcpy(request.handle, &req, sizeof(req)); |
241 | 241 | ||
242 | dprintk(DBG_TX, "%s: request %p: sending control (%s@%llu,%luB)\n", | 242 | dprintk(DBG_TX, "%s: request %p: sending control (%s@%llu,%uB)\n", |
243 | lo->disk->disk_name, req, | 243 | lo->disk->disk_name, req, |
244 | nbdcmd_to_ascii(nbd_cmd(req)), | 244 | nbdcmd_to_ascii(nbd_cmd(req)), |
245 | (unsigned long long)req->sector << 9, | 245 | (unsigned long long)blk_rq_pos(req) << 9, |
246 | req->nr_sectors << 9); | 246 | blk_rq_bytes(req)); |
247 | result = sock_xmit(lo, 1, &request, sizeof(request), | 247 | result = sock_xmit(lo, 1, &request, sizeof(request), |
248 | (nbd_cmd(req) == NBD_CMD_WRITE) ? MSG_MORE : 0); | 248 | (nbd_cmd(req) == NBD_CMD_WRITE) ? MSG_MORE : 0); |
249 | if (result <= 0) { | 249 | if (result <= 0) { |
@@ -533,11 +533,9 @@ static void do_nbd_request(struct request_queue *q) | |||
533 | { | 533 | { |
534 | struct request *req; | 534 | struct request *req; |
535 | 535 | ||
536 | while ((req = elv_next_request(q)) != NULL) { | 536 | while ((req = blk_fetch_request(q)) != NULL) { |
537 | struct nbd_device *lo; | 537 | struct nbd_device *lo; |
538 | 538 | ||
539 | blkdev_dequeue_request(req); | ||
540 | |||
541 | spin_unlock_irq(q->queue_lock); | 539 | spin_unlock_irq(q->queue_lock); |
542 | 540 | ||
543 | dprintk(DBG_BLKDEV, "%s: request %p: dequeued (flags=%x)\n", | 541 | dprintk(DBG_BLKDEV, "%s: request %p: dequeued (flags=%x)\n", |
@@ -580,13 +578,6 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *lo, | |||
580 | blk_rq_init(NULL, &sreq); | 578 | blk_rq_init(NULL, &sreq); |
581 | sreq.cmd_type = REQ_TYPE_SPECIAL; | 579 | sreq.cmd_type = REQ_TYPE_SPECIAL; |
582 | nbd_cmd(&sreq) = NBD_CMD_DISC; | 580 | nbd_cmd(&sreq) = NBD_CMD_DISC; |
583 | /* | ||
584 | * Set these to sane values in case server implementation | ||
585 | * fails to check the request type first and also to keep | ||
586 | * debugging output cleaner. | ||
587 | */ | ||
588 | sreq.sector = 0; | ||
589 | sreq.nr_sectors = 0; | ||
590 | if (!lo->sock) | 581 | if (!lo->sock) |
591 | return -EINVAL; | 582 | return -EINVAL; |
592 | nbd_send_req(lo, &sreq); | 583 | nbd_send_req(lo, &sreq); |