]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/block/xen-blkback/blkback.c
8583b130499af63e1b09c79aa0a698c4fcfd1399
[mv-sheeva.git] / drivers / block / xen-blkback / blkback.c
1 /******************************************************************************
2  *
3  * Back-end of the driver for virtual block devices. This portion of the
4  * driver exports a 'unified' block-device interface that can be accessed
5  * by any operating system that implements a compatible front end. A
6  * reference front-end implementation can be found in:
7  *  drivers/block/xen-blkfront.c
8  *
9  * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
10  * Copyright (c) 2005, Christopher Clark
11  *
12  * This program is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public License version 2
14  * as published by the Free Software Foundation; or, when distributed
15  * separately from the Linux kernel or incorporated into other
16  * software packages, subject to the following license:
17  *
18  * Permission is hereby granted, free of charge, to any person obtaining a copy
19  * of this source file (the "Software"), to deal in the Software without
20  * restriction, including without limitation the rights to use, copy, modify,
21  * merge, publish, distribute, sublicense, and/or sell copies of the Software,
22  * and to permit persons to whom the Software is furnished to do so, subject to
23  * the following conditions:
24  *
25  * The above copyright notice and this permission notice shall be included in
26  * all copies or substantial portions of the Software.
27  *
28  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
33  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
34  * IN THE SOFTWARE.
35  */
36
37 #include <linux/spinlock.h>
38 #include <linux/kthread.h>
39 #include <linux/list.h>
40 #include <linux/delay.h>
41 #include <linux/freezer.h>
42
43 #include <xen/events.h>
44 #include <xen/page.h>
45 #include <asm/xen/hypervisor.h>
46 #include <asm/xen/hypercall.h>
47 #include "common.h"
48
49 #define WRITE_BARRIER   (REQ_WRITE | REQ_FLUSH | REQ_FUA)
50
51 /*
52  * These are rather arbitrary. They are fairly large because adjacent requests
53  * pulled from a communication ring are quite likely to end up being part of
54  * the same scatter/gather request at the disc.
55  *
56  * ** TRY INCREASING 'xen_blkif_reqs' IF WRITE SPEEDS SEEM TOO LOW **
57  *
58  * This will increase the chances of being able to write whole tracks.
59  * 64 should be enough to keep us competitive with Linux.
60  */
61 static int xen_blkif_reqs = 64;
62 module_param_named(reqs, xen_blkif_reqs, int, 0);
63 MODULE_PARM_DESC(reqs, "Number of blkback requests to allocate");
64
65 /* Run-time switchable: /sys/module/blkback/parameters/ */
66 static unsigned int log_stats;
67 static unsigned int debug_lvl;
68 module_param(log_stats, int, 0644);
69 module_param(debug_lvl, int, 0644);
70
71 /*
72  * Each outstanding request that we've passed to the lower device layers has a
73  * 'pending_req' allocated to it. Each buffer_head that completes decrements
74  * the pendcnt towards zero. When it hits zero, the specified domain has a
75  * response queued for it, with the saved 'id' passed back.
76  */
77 struct pending_req {
78         struct blkif_st       *blkif;
79         u64            id;
80         int            nr_pages;
81         atomic_t       pendcnt;
82         unsigned short operation;
83         int            status;
84         struct list_head free_list;
85 };
86
87 #define BLKBACK_INVALID_HANDLE (~0)
88
89 struct xen_blkbk {
90         struct pending_req      *pending_reqs;
91         /* List of all 'pending_req' available */
92         struct list_head        pending_free;
93         /* And its spinlock. */
94         spinlock_t              pending_free_lock;
95         wait_queue_head_t       pending_free_wq;
96         /* The list of all pages that are available. */
97         struct page             **pending_pages;
98         /* And the grant handles that are available. */
99         grant_handle_t          *pending_grant_handles;
100 };
101
102 static struct xen_blkbk *blkbk;
103
104 /*
105  * Little helpful macro to figure out the index and virtual address of the
106  * pending_pages[..]. For each 'pending_req' we have have up to
107  * BLKIF_MAX_SEGMENTS_PER_REQUEST (11) pages. The seg would be from 0 through
108  * 10 and would index in the pending_pages[..]. */
109 static inline int vaddr_pagenr(struct pending_req *req, int seg)
110 {
111         return (req - blkbk->pending_reqs) *
112                 BLKIF_MAX_SEGMENTS_PER_REQUEST + seg;
113 }
114
115 #define pending_page(req, seg) pending_pages[vaddr_pagenr(req, seg)]
116
117 static inline unsigned long vaddr(struct pending_req *req, int seg)
118 {
119         unsigned long pfn = page_to_pfn(blkbk->pending_page(req, seg));
120         return (unsigned long)pfn_to_kaddr(pfn);
121 }
122
123 #define pending_handle(_req, _seg) \
124         (blkbk->pending_grant_handles[vaddr_pagenr(_req, _seg)])
125
126
127 static int do_block_io_op(struct blkif_st *blkif);
128 static void dispatch_rw_block_io(struct blkif_st *blkif,
129                                  struct blkif_request *req,
130                                  struct pending_req *pending_req);
131 static void make_response(struct blkif_st *blkif, u64 id,
132                           unsigned short op, int st);
133
134 /*
135  * Retrieve from the 'pending_reqs' a free pending_req structure to be used.
136  */
137 static struct pending_req *alloc_req(void)
138 {
139         struct pending_req *req = NULL;
140         unsigned long flags;
141
142         spin_lock_irqsave(&blkbk->pending_free_lock, flags);
143         if (!list_empty(&blkbk->pending_free)) {
144                 req = list_entry(blkbk->pending_free.next, struct pending_req,
145                                  free_list);
146                 list_del(&req->free_list);
147         }
148         spin_unlock_irqrestore(&blkbk->pending_free_lock, flags);
149         return req;
150 }
151
152 /*
153  * Return the 'pending_req' structure back to the freepool. We also
154  * wake up the thread if it was waiting for a free page.
155  */
156 static void free_req(struct pending_req *req)
157 {
158         unsigned long flags;
159         int was_empty;
160
161         spin_lock_irqsave(&blkbk->pending_free_lock, flags);
162         was_empty = list_empty(&blkbk->pending_free);
163         list_add(&req->free_list, &blkbk->pending_free);
164         spin_unlock_irqrestore(&blkbk->pending_free_lock, flags);
165         if (was_empty)
166                 wake_up(&blkbk->pending_free_wq);
167 }
168
169 /*
170  * Routines for managing virtual block devices (vbds).
171  */
172
173
174 static int vbd_translate(struct phys_req *req, struct blkif_st *blkif,
175                          int operation)
176 {
177         struct vbd *vbd = &blkif->vbd;
178         int rc = -EACCES;
179
180         if ((operation != READ) && vbd->readonly)
181                 goto out;
182
183         if (unlikely((req->sector_number + req->nr_sects) > vbd_sz(vbd)))
184                 goto out;
185
186         req->dev  = vbd->pdevice;
187         req->bdev = vbd->bdev;
188         rc = 0;
189
190  out:
191         return rc;
192 }
193
194 static void vbd_resize(struct blkif_st *blkif)
195 {
196         struct vbd *vbd = &blkif->vbd;
197         struct xenbus_transaction xbt;
198         int err;
199         struct xenbus_device *dev = xen_blkbk_xenbus(blkif->be);
200         unsigned long long new_size = vbd_sz(vbd);
201
202         printk(KERN_INFO "VBD Resize: Domid: %d, Device: (%d, %d)\n",
203                 blkif->domid, MAJOR(vbd->pdevice), MINOR(vbd->pdevice));
204         printk(KERN_INFO "VBD Resize: new size %llu\n", new_size);
205         vbd->size = new_size;
206 again:
207         err = xenbus_transaction_start(&xbt);
208         if (err) {
209                 printk(KERN_WARNING "Error starting transaction");
210                 return;
211         }
212         err = xenbus_printf(xbt, dev->nodename, "sectors", "%llu",
213                             (unsigned long long)vbd_sz(vbd));
214         if (err) {
215                 printk(KERN_WARNING "Error writing new size");
216                 goto abort;
217         }
218         /*
219          * Write the current state; we will use this to synchronize
220          * the front-end. If the current state is "connected" the
221          * front-end will get the new size information online.
222          */
223         err = xenbus_printf(xbt, dev->nodename, "state", "%d", dev->state);
224         if (err) {
225                 printk(KERN_WARNING "Error writing the state");
226                 goto abort;
227         }
228
229         err = xenbus_transaction_end(xbt, 0);
230         if (err == -EAGAIN)
231                 goto again;
232         if (err)
233                 printk(KERN_WARNING "Error ending transaction");
234 abort:
235         xenbus_transaction_end(xbt, 1);
236 }
237
238 /*
239  * Notification from the guest OS.
240  */
241 static void blkif_notify_work(struct blkif_st *blkif)
242 {
243         blkif->waiting_reqs = 1;
244         wake_up(&blkif->wq);
245 }
246
247 irqreturn_t xen_blkif_be_int(int irq, void *dev_id)
248 {
249         blkif_notify_work(dev_id);
250         return IRQ_HANDLED;
251 }
252
253 /*
254  * SCHEDULER FUNCTIONS
255  */
256
257 static void print_stats(struct blkif_st *blkif)
258 {
259         printk(KERN_DEBUG "%s: oo %3d  |  rd %4d  |  wr %4d  |  br %4d\n",
260                current->comm, blkif->st_oo_req,
261                blkif->st_rd_req, blkif->st_wr_req, blkif->st_br_req);
262         blkif->st_print = jiffies + msecs_to_jiffies(10 * 1000);
263         blkif->st_rd_req = 0;
264         blkif->st_wr_req = 0;
265         blkif->st_oo_req = 0;
266 }
267
268 int xen_blkif_schedule(void *arg)
269 {
270         struct blkif_st *blkif = arg;
271         struct vbd *vbd = &blkif->vbd;
272
273         xen_blkif_get(blkif);
274
275         if (debug_lvl)
276                 printk(KERN_DEBUG "%s: started\n", current->comm);
277
278         while (!kthread_should_stop()) {
279                 struct blk_plug plug;
280
281                 if (try_to_freeze())
282                         continue;
283                 if (unlikely(vbd->size != vbd_sz(vbd)))
284                         vbd_resize(blkif);
285
286                 wait_event_interruptible(
287                         blkif->wq,
288                         blkif->waiting_reqs || kthread_should_stop());
289                 wait_event_interruptible(
290                         blkbk->pending_free_wq,
291                         !list_empty(&blkbk->pending_free) ||
292                         kthread_should_stop());
293
294                 blkif->waiting_reqs = 0;
295                 smp_mb(); /* clear flag *before* checking for work */
296
297                 blk_start_plug(&plug);
298
299                 if (do_block_io_op(blkif))
300                         blkif->waiting_reqs = 1;
301
302                 blk_finish_plug(&plug);
303
304                 if (log_stats && time_after(jiffies, blkif->st_print))
305                         print_stats(blkif);
306         }
307
308         if (log_stats)
309                 print_stats(blkif);
310         if (debug_lvl)
311                 printk(KERN_DEBUG "%s: exiting\n", current->comm);
312
313         blkif->xenblkd = NULL;
314         xen_blkif_put(blkif);
315
316         return 0;
317 }
318
319 struct seg_buf {
320         unsigned long buf;
321         unsigned int nsec;
322 };
323 /*
324  * Unmap the grant references, and also remove the M2P over-rides
325  * used in the 'pending_req'.
326 */
327 static void xen_blkbk_unmap(struct pending_req *req)
328 {
329         struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
330         unsigned int i, invcount = 0;
331         grant_handle_t handle;
332         int ret;
333
334         for (i = 0; i < req->nr_pages; i++) {
335                 handle = pending_handle(req, i);
336                 if (handle == BLKBACK_INVALID_HANDLE)
337                         continue;
338                 gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
339                                     GNTMAP_host_map, handle);
340                 pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
341                 invcount++;
342         }
343
344         ret = HYPERVISOR_grant_table_op(
345                 GNTTABOP_unmap_grant_ref, unmap, invcount);
346         BUG_ON(ret);
347         /* Note, we use invcount, so nr->pages, so we can't index
348          * using vaddr(req, i).
349          */
350         for (i = 0; i < invcount; i++) {
351                 ret = m2p_remove_override(
352                         virt_to_page(unmap[i].host_addr), false);
353                 if (ret) {
354                         printk(KERN_ALERT "Failed to remove M2P override for " \
355                                 "%lx\n", (unsigned long)unmap[i].host_addr);
356                         continue;
357                 }
358         }
359 }
360 static int xen_blkbk_map(struct blkif_request *req, struct pending_req *pending_req,
361                          struct seg_buf seg[])
362 {
363         struct gnttab_map_grant_ref map[BLKIF_MAX_SEGMENTS_PER_REQUEST];
364         int i;
365         int nseg = req->nr_segments;
366         int ret = 0;
367         /* Fill out preq.nr_sects with proper amount of sectors, and setup
368          * assign map[..] with the PFN of the page in our domain with the
369          * corresponding grant reference for each page.
370          */
371         for (i = 0; i < nseg; i++) {
372                 uint32_t flags;
373
374                 flags = GNTMAP_host_map;
375                 if (pending_req->operation != BLKIF_OP_READ)
376                         flags |= GNTMAP_readonly;
377                 gnttab_set_map_op(&map[i], vaddr(pending_req, i), flags,
378                                   req->u.rw.seg[i].gref, pending_req->blkif->domid);
379         }
380
381         ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, map, nseg);
382         BUG_ON(ret);
383
384         /* Now swizzel the MFN in our domain with the MFN from the other domain
385          * so that when we access vaddr(pending_req,i) it has the contents of
386          * the page from the other domain.
387          */
388         for (i = 0; i < nseg; i++) {
389                 if (unlikely(map[i].status != 0)) {
390                         DPRINTK("invalid buffer -- could not remap it\n");
391                         map[i].handle = BLKBACK_INVALID_HANDLE;
392                         ret |= 1;
393                 }
394
395                 pending_handle(pending_req, i) = map[i].handle;
396
397                 if (ret)
398                         continue;
399
400                 ret = m2p_add_override(PFN_DOWN(map[i].dev_bus_addr),
401                         blkbk->pending_page(pending_req, i), false);
402                 if (ret) {
403                         printk(KERN_ALERT "Failed to install M2P override for"\
404                                 " %lx (ret: %d)\n", (unsigned long)
405                                 map[i].dev_bus_addr, ret);
406                         /* We could switch over to GNTTABOP_copy */
407                         continue;
408                 }
409
410                 seg[i].buf  = map[i].dev_bus_addr |
411                         (req->u.rw.seg[i].first_sect << 9);
412         }
413         return ret;
414 }
415
416 /*
417  * Completion callback on the bio's. Called as bh->b_end_io()
418  */
419
420 static void __end_block_io_op(struct pending_req *pending_req, int error)
421 {
422         /* An error fails the entire request. */
423         if ((pending_req->operation == BLKIF_OP_WRITE_BARRIER) &&
424             (error == -EOPNOTSUPP)) {
425                 DPRINTK("blkback: write barrier op failed, not supported\n");
426                 xen_blkbk_barrier(XBT_NIL, pending_req->blkif->be, 0);
427                 pending_req->status = BLKIF_RSP_EOPNOTSUPP;
428         } else if (error) {
429                 DPRINTK("Buffer not up-to-date at end of operation, "
430                         "error=%d\n", error);
431                 pending_req->status = BLKIF_RSP_ERROR;
432         }
433
434         /* If all of the bio's have completed it is time to unmap
435          * the grant references associated with 'request' and provide
436          * the proper response on the ring.
437          */
438         if (atomic_dec_and_test(&pending_req->pendcnt)) {
439                 xen_blkbk_unmap(pending_req);
440                 make_response(pending_req->blkif, pending_req->id,
441                               pending_req->operation, pending_req->status);
442                 xen_blkif_put(pending_req->blkif);
443                 free_req(pending_req);
444         }
445 }
446
447 /*
448  * bio callback.
449  */
450 static void end_block_io_op(struct bio *bio, int error)
451 {
452         __end_block_io_op(bio->bi_private, error);
453         bio_put(bio);
454 }
455
456
457
458 /*
459  * Function to copy the from the ring buffer the 'struct blkif_request'
460  * (which has the sectors we want, number of them, grant references, etc),
461  * and transmute  it to the block API to hand it over to the proper block disk.
462  */
463 static int do_block_io_op(struct blkif_st *blkif)
464 {
465         union blkif_back_rings *blk_rings = &blkif->blk_rings;
466         struct blkif_request req;
467         struct pending_req *pending_req;
468         RING_IDX rc, rp;
469         int more_to_do = 0;
470
471         rc = blk_rings->common.req_cons;
472         rp = blk_rings->common.sring->req_prod;
473         rmb(); /* Ensure we see queued requests up to 'rp'. */
474
475         while (rc != rp) {
476
477                 if (RING_REQUEST_CONS_OVERFLOW(&blk_rings->common, rc))
478                         break;
479
480                 if (kthread_should_stop()) {
481                         more_to_do = 1;
482                         break;
483                 }
484
485                 pending_req = alloc_req();
486                 if (NULL == pending_req) {
487                         blkif->st_oo_req++;
488                         more_to_do = 1;
489                         break;
490                 }
491
492                 switch (blkif->blk_protocol) {
493                 case BLKIF_PROTOCOL_NATIVE:
494                         memcpy(&req, RING_GET_REQUEST(&blk_rings->native, rc), sizeof(req));
495                         break;
496                 case BLKIF_PROTOCOL_X86_32:
497                         blkif_get_x86_32_req(&req, RING_GET_REQUEST(&blk_rings->x86_32, rc));
498                         break;
499                 case BLKIF_PROTOCOL_X86_64:
500                         blkif_get_x86_64_req(&req, RING_GET_REQUEST(&blk_rings->x86_64, rc));
501                         break;
502                 default:
503                         BUG();
504                 }
505                 blk_rings->common.req_cons = ++rc; /* before make_response() */
506
507                 /* Apply all sanity checks to /private copy/ of request. */
508                 barrier();
509
510                 switch (req.operation) {
511                 case BLKIF_OP_READ:
512                         blkif->st_rd_req++;
513                         dispatch_rw_block_io(blkif, &req, pending_req);
514                         break;
515                 case BLKIF_OP_WRITE_BARRIER:
516                         blkif->st_br_req++;
517                         /* fall through */
518                 case BLKIF_OP_WRITE:
519                         blkif->st_wr_req++;
520                         dispatch_rw_block_io(blkif, &req, pending_req);
521                         break;
522                 default:
523                         /* A good sign something is wrong: sleep for a while to
524                          * avoid excessive CPU consumption by a bad guest. */
525                         msleep(1);
526                         DPRINTK("error: unknown block io operation [%d]\n",
527                                 req.operation);
528                         make_response(blkif, req.id, req.operation,
529                                       BLKIF_RSP_ERROR);
530                         free_req(pending_req);
531                         break;
532                 }
533
534                 /* Yield point for this unbounded loop. */
535                 cond_resched();
536         }
537
538         return more_to_do;
539 }
540
541 /*
542  * Transumation of the 'struct blkif_request' to a proper 'struct bio'
543  * and call the 'submit_bio' to pass it to the underlaying storage.
544  */
545 static void dispatch_rw_block_io(struct blkif_st *blkif,
546                                  struct blkif_request *req,
547                                  struct pending_req *pending_req)
548 {
549         struct phys_req preq;
550         struct seg_buf seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
551         unsigned int nseg;
552         struct bio *bio = NULL;
553         struct bio *biolist[BLKIF_MAX_SEGMENTS_PER_REQUEST];
554         int i, nbio = 0;
555         int operation;
556
557         switch (req->operation) {
558         case BLKIF_OP_READ:
559                 operation = READ;
560                 break;
561         case BLKIF_OP_WRITE:
562                 operation = WRITE_ODIRECT;
563                 break;
564         case BLKIF_OP_WRITE_BARRIER:
565                 operation = WRITE_BARRIER;
566                 break;
567         default:
568                 operation = 0; /* make gcc happy */
569                 BUG();
570         }
571
572         /* Check that the number of segments is sane. */
573         nseg = req->nr_segments;
574         if (unlikely(nseg == 0 && operation != WRITE_BARRIER) ||
575             unlikely(nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) {
576                 DPRINTK("Bad number of segments in request (%d)\n", nseg);
577                 /* Haven't submitted any bio's yet. */
578                 goto fail_response;
579         }
580
581         preq.dev           = req->handle;
582         preq.sector_number = req->u.rw.sector_number;
583         preq.nr_sects      = 0;
584
585         pending_req->blkif     = blkif;
586         pending_req->id        = req->id;
587         pending_req->operation = req->operation;
588         pending_req->status    = BLKIF_RSP_OKAY;
589         pending_req->nr_pages  = nseg;
590
591         for (i = 0; i < nseg; i++) {
592                 seg[i].nsec = req->u.rw.seg[i].last_sect -
593                         req->u.rw.seg[i].first_sect + 1;
594                 if ((req->u.rw.seg[i].last_sect >= (PAGE_SIZE >> 9)) ||
595                     (req->u.rw.seg[i].last_sect < req->u.rw.seg[i].first_sect))
596                         goto fail_response;
597                 preq.nr_sects += seg[i].nsec;
598
599         }
600
601         if (vbd_translate(&preq, blkif, operation) != 0) {
602                 DPRINTK("access denied: %s of [%llu,%llu] on dev=%04x\n",
603                         operation == READ ? "read" : "write",
604                         preq.sector_number,
605                         preq.sector_number + preq.nr_sects, preq.dev);
606                 goto fail_response;
607         }
608         /* This check _MUST_ be done after vbd_translate as the preq.bdev
609          * is set there. */
610         for (i = 0; i < nseg; i++) {
611                 if (((int)preq.sector_number|(int)seg[i].nsec) &
612                     ((bdev_logical_block_size(preq.bdev) >> 9) - 1)) {
613                         DPRINTK("Misaligned I/O request from domain %d",
614                                 blkif->domid);
615                         goto fail_response;
616                 }
617         }
618         /* If we have failed at this point, we need to undo the M2P override,
619          * set gnttab_set_unmap_op on all of the grant references and perform
620          * the hypercall to unmap the grants - that is all done in
621          * xen_blkbk_unmap.
622          */
623         if (xen_blkbk_map(req, pending_req, seg))
624                 goto fail_flush;
625
626         /* This corresponding blkif_put is done in __end_block_io_op */
627         xen_blkif_get(blkif);
628
629         for (i = 0; i < nseg; i++) {
630                 while ((bio == NULL) ||
631                        (bio_add_page(bio,
632                                      blkbk->pending_page(pending_req, i),
633                                      seg[i].nsec << 9,
634                                      seg[i].buf & ~PAGE_MASK) == 0)) {
635
636                         bio = biolist[nbio++] = bio_alloc(GFP_KERNEL, nseg-i);
637                         if (unlikely(bio == NULL))
638                                 goto fail_put_bio;
639
640                         bio->bi_bdev    = preq.bdev;
641                         bio->bi_private = pending_req;
642                         bio->bi_end_io  = end_block_io_op;
643                         bio->bi_sector  = preq.sector_number;
644                 }
645
646                 preq.sector_number += seg[i].nsec;
647         }
648
649         /* This will be hit if the operation was a barrier. */
650         if (!bio) {
651                 BUG_ON(operation != WRITE_BARRIER);
652                 bio = biolist[nbio++] = bio_alloc(GFP_KERNEL, 0);
653                 if (unlikely(bio == NULL))
654                         goto fail_put_bio;
655
656                 bio->bi_bdev    = preq.bdev;
657                 bio->bi_private = pending_req;
658                 bio->bi_end_io  = end_block_io_op;
659                 bio->bi_sector  = -1;
660         }
661
662
663         /* We set it one so that the last submit_bio does not have to call
664          * atomic_inc.
665          */
666         atomic_set(&pending_req->pendcnt, nbio);
667
668         for (i = 0; i < nbio; i++)
669                 submit_bio(operation, biolist[i]);
670
671         if (operation == READ)
672                 blkif->st_rd_sect += preq.nr_sects;
673         else if (operation == WRITE || operation == WRITE_BARRIER)
674                 blkif->st_wr_sect += preq.nr_sects;
675
676         return;
677
678  fail_flush:
679         xen_blkbk_unmap(pending_req);
680  fail_response:
681         /* Haven't submitted any bio's yet. */
682         make_response(blkif, req->id, req->operation, BLKIF_RSP_ERROR);
683         free_req(pending_req);
684         msleep(1); /* back off a bit */
685         return;
686
687  fail_put_bio:
688         for (i = 0; i < (nbio-1); i++)
689                 bio_put(biolist[i]);
690         __end_block_io_op(pending_req, -EINVAL);
691         msleep(1); /* back off a bit */
692         return;
693 }
694
695
696
697 /*
698  * Put a response on the ring on how the operation fared.
699  */
700 static void make_response(struct blkif_st *blkif, u64 id,
701                           unsigned short op, int st)
702 {
703         struct blkif_response  resp;
704         unsigned long     flags;
705         union blkif_back_rings *blk_rings = &blkif->blk_rings;
706         int more_to_do = 0;
707         int notify;
708
709         resp.id        = id;
710         resp.operation = op;
711         resp.status    = st;
712
713         spin_lock_irqsave(&blkif->blk_ring_lock, flags);
714         /* Place on the response ring for the relevant domain. */
715         switch (blkif->blk_protocol) {
716         case BLKIF_PROTOCOL_NATIVE:
717                 memcpy(RING_GET_RESPONSE(&blk_rings->native, blk_rings->native.rsp_prod_pvt),
718                        &resp, sizeof(resp));
719                 break;
720         case BLKIF_PROTOCOL_X86_32:
721                 memcpy(RING_GET_RESPONSE(&blk_rings->x86_32, blk_rings->x86_32.rsp_prod_pvt),
722                        &resp, sizeof(resp));
723                 break;
724         case BLKIF_PROTOCOL_X86_64:
725                 memcpy(RING_GET_RESPONSE(&blk_rings->x86_64, blk_rings->x86_64.rsp_prod_pvt),
726                        &resp, sizeof(resp));
727                 break;
728         default:
729                 BUG();
730         }
731         blk_rings->common.rsp_prod_pvt++;
732         RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
733         if (blk_rings->common.rsp_prod_pvt == blk_rings->common.req_cons) {
734                 /*
735                  * Tail check for pending requests. Allows frontend to avoid
736                  * notifications if requests are already in flight (lower
737                  * overheads and promotes batching).
738                  */
739                 RING_FINAL_CHECK_FOR_REQUESTS(&blk_rings->common, more_to_do);
740
741         } else if (RING_HAS_UNCONSUMED_REQUESTS(&blk_rings->common)) {
742                 more_to_do = 1;
743         }
744
745         spin_unlock_irqrestore(&blkif->blk_ring_lock, flags);
746
747         if (more_to_do)
748                 blkif_notify_work(blkif);
749         if (notify)
750                 notify_remote_via_irq(blkif->irq);
751 }
752
753 static int __init xen_blkif_init(void)
754 {
755         int i, mmap_pages;
756         int rc = 0;
757
758         if (!xen_pv_domain())
759                 return -ENODEV;
760
761         blkbk = kzalloc(sizeof(struct xen_blkbk), GFP_KERNEL);
762         if (!blkbk) {
763                 printk(KERN_ALERT "%s: out of memory!\n", __func__);
764                 return -ENOMEM;
765         }
766
767         mmap_pages = xen_blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
768
769         blkbk->pending_reqs          = kmalloc(sizeof(blkbk->pending_reqs[0]) *
770                                         xen_blkif_reqs, GFP_KERNEL);
771         blkbk->pending_grant_handles = kzalloc(sizeof(blkbk->pending_grant_handles[0]) *
772                                         mmap_pages, GFP_KERNEL);
773         blkbk->pending_pages         = kzalloc(sizeof(blkbk->pending_pages[0]) *
774                                         mmap_pages, GFP_KERNEL);
775
776         if (!blkbk->pending_reqs || !blkbk->pending_grant_handles ||
777             !blkbk->pending_pages) {
778                 rc = -ENOMEM;
779                 goto out_of_memory;
780         }
781
782         for (i = 0; i < mmap_pages; i++) {
783                 blkbk->pending_grant_handles[i] = BLKBACK_INVALID_HANDLE;
784                 blkbk->pending_pages[i] = alloc_page(GFP_KERNEL);
785                 if (blkbk->pending_pages[i] == NULL) {
786                         rc = -ENOMEM;
787                         goto out_of_memory;
788                 }
789         }
790         rc = xen_blkif_interface_init();
791         if (rc)
792                 goto failed_init;
793
794         memset(blkbk->pending_reqs, 0, sizeof(blkbk->pending_reqs));
795
796         INIT_LIST_HEAD(&blkbk->pending_free);
797         spin_lock_init(&blkbk->pending_free_lock);
798         init_waitqueue_head(&blkbk->pending_free_wq);
799
800         for (i = 0; i < xen_blkif_reqs; i++)
801                 list_add_tail(&blkbk->pending_reqs[i].free_list,
802                               &blkbk->pending_free);
803
804         rc = xen_blkif_xenbus_init();
805         if (rc)
806                 goto failed_init;
807
808         return 0;
809
810  out_of_memory:
811         printk(KERN_ERR "%s: out of memory\n", __func__);
812  failed_init:
813         kfree(blkbk->pending_reqs);
814         kfree(blkbk->pending_grant_handles);
815         for (i = 0; i < mmap_pages; i++) {
816                 if (blkbk->pending_pages[i])
817                         __free_page(blkbk->pending_pages[i]);
818         }
819         kfree(blkbk->pending_pages);
820         kfree(blkbk);
821         blkbk = NULL;
822         return rc;
823 }
824
825 module_init(xen_blkif_init);
826
827 MODULE_LICENSE("Dual BSD/GPL");