]> xenbits.xensource.com Git - people/ssmith/nc2-2.6.27.git/commitdiff
patch backend-track-pages-with-page-flags.patch
authorSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 30 Jun 2009 11:55:47 +0000 (12:55 +0100)
committerSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 30 Jun 2009 11:55:47 +0000 (12:55 +0100)
drivers/xen/blkback/blkback.c
drivers/xen/blktap/blktap.c
drivers/xen/core/gnttab.c
drivers/xen/netback/netback.c
include/linux/page-flags.h

index 6e9ef7b73cd4ed533938d3c7e966f66d5e02f52a..612f7c9b572bb8ff45679d1a9a4ffeb65b5373fb 100644 (file)
@@ -623,6 +623,9 @@ static int __init blkif_init(void)
                                        mmap_pages, GFP_KERNEL);
        pending_pages         = alloc_empty_pages_and_pagevec(mmap_pages);
 
+       for(i = 0; i < mmap_pages; i++)
+               SetPageBlkback(pending_pages[i]);
+
        if (!pending_reqs || !pending_grant_handles || !pending_pages)
                goto out_of_memory;
 
index 752382a81963f424b61cd016280b56e5655ad3d7..cd555a8e778ecbed939ea6ece5ee1d07bd0381e5 100644 (file)
@@ -876,6 +876,9 @@ static int req_increase(void)
        DPRINTK("%s: reqs=%d, pages=%d\n",
                __FUNCTION__, blkif_reqs, mmap_pages);
 
+       for (i = 0; i < mmap_pages; i++)
+               SetPageBlkback(foreign_pages[mmap_alloc][i]);
+
        for (i = 0; i < MAX_PENDING_REQS; i++) {
                list_add_tail(&pending_reqs[mmap_alloc][i].free_list, 
                              &pending_free);
index 82c2e644d9ae85f9337c3afc466f79d447216a2b..e6b4917bbc83dc1be3142fe32c9fec70ce054372 100644 (file)
@@ -593,6 +593,8 @@ int gnttab_copy_grant_page(grant_ref_t ref, struct page **pagep)
        *pagep = new_page;
 
        SetPageForeign(page, gnttab_page_free);
+       ClearPageNetback(page);
+       ClearPageBlkback(page);
        page->mapping = NULL;
 
 out:
index efa1d17dddf1592fcaf81336509d29ea8206e263..cb2d56229658b3de7b0e39d3fea381a78d0cf428 100644 (file)
@@ -866,8 +866,13 @@ static void tx_credit_callback(unsigned long data)
 
 static inline int copy_pending_req(PEND_RING_IDX pending_idx)
 {
-       return gnttab_copy_grant_page(grant_tx_handle[pending_idx],
-                                     &mmap_pages[pending_idx]);
+       int err = gnttab_copy_grant_page(grant_tx_handle[pending_idx],
+                                       &mmap_pages[pending_idx]);
+
+       if (!err)
+               SetPageNetback(mmap_pages[pending_idx]);
+
+       return err;
 }
 
 inline static void net_tx_action_dealloc(void)
@@ -1598,6 +1603,7 @@ static int __init netback_init(void)
        for (i = 0; i < MAX_PENDING_REQS; i++) {
                page = mmap_pages[i];
                SetPageForeign(page, netif_page_release);
+               SetPageNetback(page);
                netif_set_page_index(page, i);
                INIT_LIST_HEAD(&pending_inuse[i].list);
        }
index ef187aa8c007787dbd3043ad80c5aae64774b22d..1d4e02daaad9b4a70cf2542716fc13763ac44c2f 100644 (file)
@@ -104,6 +104,8 @@ enum pageflags {
                                 * bad_page() checks include this bit.
                                 * Should not use PG_arch_1 as that may have
                                 * a different purpose elsewhere. */
+       PG_netback,             /* Page is owned by netback */
+       PG_blkback,             /* Page is owned by blkback */
 #endif
        __NR_PAGEFLAGS,
 
@@ -302,6 +304,8 @@ static inline void PageForeignDestructor(struct page *page, unsigned int order)
 {
        ((void (*)(struct page *, unsigned int))page->index)(page, order);
 }
+PAGEFLAG(Blkback, blkback)
+PAGEFLAG(Netback, netback)
 #endif
 
 extern void cancel_dirty_page(struct page *page, unsigned int account_size);