3/9

--
SUSE Labs, Novell Inc.
PF_MEMALLOC is really not a tool for tinkering. It is pretty specifically
used to prevent recursion into page reclaim, and to prevent low memory
deadlocks.

The mm/swap_state.c code was the only legitimate tinkerer. Its concern
was addressed by the previous patch.

Signed-off-by: Nick Piggin <[EMAIL PROTECTED]>


Index: linux-2.6/mm/swap_state.c
===================================================================
--- linux-2.6.orig/mm/swap_state.c      2005-04-12 22:05:44.000000000 +1000
+++ linux-2.6/mm/swap_state.c   2005-04-12 22:26:12.000000000 +1000
@@ -143,7 +143,6 @@ void __delete_from_swap_cache(struct pag
 int add_to_swap(struct page * page)
 {
        swp_entry_t entry;
-       int pf_flags;
        int err;
 
        if (!PageLocked(page))
@@ -154,30 +153,11 @@ int add_to_swap(struct page * page)
                if (!entry.val)
                        return 0;
 
-               /* Radix-tree node allocations are performing
-                * GFP_ATOMIC allocations under PF_MEMALLOC.  
-                * They can completely exhaust the page allocator.  
-                *
-                * So PF_MEMALLOC is dropped here.  This causes the slab 
-                * allocations to fail earlier, so radix-tree nodes will 
-                * then be allocated from the mempool reserves.
-                *
-                * We're still using __GFP_HIGH for radix-tree node
-                * allocations, so some of the emergency pools are available,
-                * just not all of them.
-                */
-
-               pf_flags = current->flags;
-               current->flags &= ~PF_MEMALLOC;
-
                /*
                 * Add it to the swap cache and mark it dirty
                 */
                err = __add_to_swap_cache(page, entry, GFP_ATOMIC|__GFP_NOWARN);
 
-               if (pf_flags & PF_MEMALLOC)
-                       current->flags |= PF_MEMALLOC;
-
                switch (err) {
                case 0:                         /* Success */
                        SetPageUptodate(page);
Index: linux-2.6/drivers/md/dm-crypt.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-crypt.c        2005-04-12 22:05:44.000000000 
+1000
+++ linux-2.6/drivers/md/dm-crypt.c     2005-04-12 22:26:12.000000000 +1000
@@ -331,25 +331,14 @@ crypt_alloc_buffer(struct crypt_config *
        struct bio *bio;
        unsigned int nr_iovecs = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
        int gfp_mask = GFP_NOIO | __GFP_HIGHMEM;
-       unsigned long flags = current->flags;
        unsigned int i;
 
-       /*
-        * Tell VM to act less aggressively and fail earlier.
-        * This is not necessary but increases throughput.
-        * FIXME: Is this really intelligent?
-        */
-       current->flags &= ~PF_MEMALLOC;
-
        if (base_bio)
                bio = bio_clone(base_bio, GFP_NOIO);
        else
                bio = bio_alloc(GFP_NOIO, nr_iovecs);
-       if (!bio) {
-               if (flags & PF_MEMALLOC)
-                       current->flags |= PF_MEMALLOC;
+       if (!bio)
                return NULL;
-       }
 
        /* if the last bio was not complete, continue where that one ended */
        bio->bi_idx = *bio_vec_idx;
@@ -386,9 +375,6 @@ crypt_alloc_buffer(struct crypt_config *
                size -= bv->bv_len;
        }
 
-       if (flags & PF_MEMALLOC)
-               current->flags |= PF_MEMALLOC;
-
        if (!bio->bi_size) {
                bio_put(bio);
                return NULL;
Index: linux-2.6/fs/mpage.c
===================================================================
--- linux-2.6.orig/fs/mpage.c   2005-04-12 22:05:44.000000000 +1000
+++ linux-2.6/fs/mpage.c        2005-04-12 22:26:12.000000000 +1000
@@ -105,11 +105,6 @@ mpage_alloc(struct block_device *bdev,
 
        bio = bio_alloc(gfp_flags, nr_vecs);
 
-       if (bio == NULL && (current->flags & PF_MEMALLOC)) {
-               while (!bio && (nr_vecs /= 2))
-                       bio = bio_alloc(gfp_flags, nr_vecs);
-       }
-
        if (bio) {
                bio->bi_bdev = bdev;
                bio->bi_sector = first_sector;

Reply via email to