]> xenbits.xensource.com Git - xenclient/kernel.git/commitdiff
imported patch backend-track-pages-with-page-flags.patch blank-updates
authort_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:01 +0000 (12:06 +0000)
committert_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:01 +0000 (12:06 +0000)
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 e75c1db85175ac28bee6b1174167220ca2fcd9ee..4b8b5ba6fc0e2b559244779f27edbc302fdec9be 100644 (file)
@@ -615,6 +615,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 5b00751dea22a8b2e53cf3867e54d745d8540b99..a2f51ce797fcb1c462b2a092537a983edeee6656 100644 (file)
@@ -875,6 +875,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 fd83ea0bf0995286a8644df051c7f8199fcc0469..9b1e4d245cbe763b597ff212df27afd069fe69b1 100644 (file)
@@ -589,6 +589,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 145f67db669f8fcdd6b6c70271add013b2687996..d771bf067ed8126e5cccd82e2d476fef951bce6b 100644 (file)
@@ -863,8 +863,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)
@@ -1590,6 +1595,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 cab8551b7d897a7b98c18c0dc548b32666a54bdf..e2f915294a29696ed9a0c606a0fcca95ef0798a9 100644 (file)
 
 #define PG_foreign             20      /* Page is owned by foreign allocator. */
 
+#define PG_netback             21      /* Page is owned by netback */
+#define PageNetback(page)      test_bit(PG_netback, &(page)->flags)
+#define SetPageNetback(page)   set_bit(PG_netback, &(page)->flags)
+#define ClearPageNetback(page) clear_bit(PG_netback, &(page)->flags)
+
+#define PG_blkback             22      /* Page is owned by blkback */
+#define PageBlkback(page)      test_bit(PG_blkback, &(page)->flags)
+#define SetPageBlkback(page)   set_bit(PG_blkback, &(page)->flags)
+#define ClearPageBlkback(page) clear_bit(PG_blkback, &(page)->flags)
+
 /*
  * Manipulation of page state flags
  */