[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH][2/4][IOMGR] Add I/O request manager interface into blkback
This patch adds I/O request management interface into blkback. -------------------------------------------------- Satoshi UCHIDA NEC Corporation, Japan # HG changeset patch # User s-uchida@xxxxxxxxxxxxx # Date 1184302092 -32400 # Node ID ce1e6cb8e92dc12d16ecb8f8a3a02cb2773e54e3 # Parent f4ebae5f227414614258f68f358f4dcb0d4ebb51 [IOMGR,BLKBACK] Add I/O request management for virtual block devices into blkback. Signed-off-by Satoshi UCHIDA <s-uchida@xxxxxxxxxxxxx> diff -r f4ebae5f2274 -r ce1e6cb8e92d drivers/xen/blkback/blkback.c --- a/drivers/xen/blkback/blkback.c Fri Jul 13 13:45:30 2007 +0900 +++ b/drivers/xen/blkback/blkback.c Fri Jul 13 13:48:12 2007 +0900 @@ -41,6 +41,10 @@ #include <xen/balloon.h> #include <asm/hypervisor.h> #include "common.h" + +#ifdef CONFIG_XEN_IOMGR +#include <xen/iomgr.h> +#endif /* * These are rather arbitrary. They are fairly large because adjacent requests @@ -138,6 +142,10 @@ static void free_req(pending_req_t *req) spin_unlock_irqrestore(&pending_free_lock, flags); if (was_empty) wake_up(&pending_free_wq); + +#ifdef CONFIG_XEN_IOMGR + do_iomgr_free_request(req->blkif->be->dev); +#endif } static void unplug_queue(blkif_t *blkif) @@ -206,6 +214,10 @@ int blkif_schedule(void *arg) if (debug_lvl) printk(KERN_DEBUG "%s: started\n", current->comm); + +#ifdef CONFIG_XEN_IOMGR + do_iomgr_dev_start(blkif->be->dev); +#endif while (!kthread_should_stop()) { if(try_to_freeze()) @@ -218,6 +230,10 @@ int blkif_schedule(void *arg) pending_free_wq, !list_empty(&pending_free) || kthread_should_stop()); +#ifdef CONFIG_XEN_IOMGR + do_iomgr_waiting_request(blkif->be->dev); +#endif + blkif->waiting_reqs = 0; smp_mb(); /* clear flag *before* checking for work */ @@ -233,6 +249,10 @@ int blkif_schedule(void *arg) print_stats(blkif); if (debug_lvl) printk(KERN_DEBUG "%s: exiting\n", current->comm); + +#ifdef CONFIG_XEN_IOMGR + do_iomgr_dev_stop(blkif->be->dev); +#endif blkif->xenblkd = NULL; blkif_put(blkif); @@ -316,11 +336,25 @@ static int do_block_io_op(blkif_t *blkif if (RING_REQUEST_CONS_OVERFLOW(&blk_rings->common, rc)) break; +#ifdef CONFIG_XEN_IOMGR + if (do_iomgr_allow_request(blkif->be->dev)) { + more_to_do = 1; + break; + } +#endif + pending_req = alloc_req(); if (NULL == pending_req) { +#ifdef CONFIG_XEN_IOMGR + do_iomgr_oo_abort_request(blkif->be->dev); +#endif blkif->st_oo_req++; more_to_do = 1; break; +#ifdef CONFIG_XEN_IOMGR + } else { + do_iomgr_alloc_request(blkif->be->dev); +#endif } switch (blkif->blk_protocol) { diff -r f4ebae5f2274 -r ce1e6cb8e92d drivers/xen/blkback/common.h --- a/drivers/xen/blkback/common.h Fri Jul 13 13:45:30 2007 +0900 +++ b/drivers/xen/blkback/common.h Fri Jul 13 13:48:12 2007 +0900 @@ -96,6 +96,16 @@ typedef struct blkif_st { grant_ref_t shmem_ref; } blkif_t; +struct backend_info +{ + struct xenbus_device *dev; + blkif_t *blkif; + struct xenbus_watch backend_watch; + unsigned major; + unsigned minor; + char *mode; +}; + blkif_t *blkif_alloc(domid_t domid); void blkif_disconnect(blkif_t *blkif); void blkif_free(blkif_t *blkif); diff -r f4ebae5f2274 -r ce1e6cb8e92d drivers/xen/blkback/xenbus.c --- a/drivers/xen/blkback/xenbus.c Fri Jul 13 13:45:30 2007 +0900 +++ b/drivers/xen/blkback/xenbus.c Fri Jul 13 13:48:12 2007 +0900 @@ -26,16 +26,6 @@ #define DPRINTK(fmt, args...) \ pr_debug("blkback/xenbus (%s:%d) " fmt ".\n", \ __FUNCTION__, __LINE__, ##args) - -struct backend_info -{ - struct xenbus_device *dev; - blkif_t *blkif; - struct xenbus_watch backend_watch; - unsigned major; - unsigned minor; - char *mode; -}; static void connect(struct backend_info *); static int connect_ring(struct backend_info *); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |