diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-ia64/page.h | 3 | ||||
| -rw-r--r-- | include/asm-sparc64/compat.h | 2 | ||||
| -rw-r--r-- | include/asm-x86_64/system.h | 2 | ||||
| -rw-r--r-- | include/linux/highmem.h | 4 | ||||
| -rw-r--r-- | include/linux/mm.h | 4 | ||||
| -rw-r--r-- | include/linux/raid/raid5.h | 2 |
6 files changed, 13 insertions, 4 deletions
diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index 1991944ddfd9..24770c011fd8 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h @@ -79,7 +79,8 @@ do { \ #define alloc_zeroed_user_highpage(vma, vaddr) \ ({ \ struct page *page = alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO, vma, vaddr); \ - flush_dcache_page(page); \ + if (page) \ + flush_dcache_page(page); \ page; \ }) diff --git a/include/asm-sparc64/compat.h b/include/asm-sparc64/compat.h index e26d7d85c55a..da9c81a6af5a 100644 --- a/include/asm-sparc64/compat.h +++ b/include/asm-sparc64/compat.h @@ -133,6 +133,8 @@ static __inline__ void __user *compat_alloc_user_space(long len) if (!(test_thread_flag(TIF_32BIT))) usp += STACK_BIAS; + else + usp &= 0xffffffffUL; return (void __user *) (usp - len); } diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index 05acc62c2b61..c1710933828f 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h @@ -35,7 +35,7 @@ "thread_return:\n\t" \ "movq %%gs:%P[pda_pcurrent],%%rsi\n\t" \ "movq %P[thread_info](%%rsi),%%r8\n\t" \ - "btr %[tif_fork],%P[ti_flags](%%r8)\n\t" \ + LOCK "btr %[tif_fork],%P[ti_flags](%%r8)\n\t" \ "movq %%rax,%%rdi\n\t" \ "jc ret_from_fork\n\t" \ RESTORE_CONTEXT \ diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 11d84c93af71..2a7e6c65c882 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -48,7 +48,9 @@ alloc_zeroed_user_highpage(struct vm_area_struct *vma, unsigned long vaddr) { struct page *page = alloc_page_vma(GFP_HIGHUSER, vma, vaddr); - clear_user_highpage(page, vaddr); + if (page) + clear_user_highpage(page, vaddr); + return page; } #endif diff --git a/include/linux/mm.h b/include/linux/mm.h index 10d011f464d6..3a8c47c5dc9c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -756,7 +756,9 @@ extern unsigned long page_unuse(struct page *); extern void truncate_inode_pages(struct address_space *, loff_t); /* generic vm_area_ops exported for stackable file systems */ -struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *); +extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *); +extern int filemap_populate(struct vm_area_struct *, unsigned long, + unsigned long, pgprot_t, unsigned long, int); /* mm/page-writeback.c */ int write_one_page(struct page *page, int wait); diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h index baf88d2ad986..d63ddcb4afad 100644 --- a/include/linux/raid/raid5.h +++ b/include/linux/raid/raid5.h @@ -152,6 +152,7 @@ struct stripe_head { #define R5_Wantread 4 /* want to schedule a read */ #define R5_Wantwrite 5 #define R5_Syncio 6 /* this io need to be accounted as resync io */ +#define R5_Overlap 7 /* There is a pending overlapping request on this block */ /* * Write method @@ -219,6 +220,7 @@ struct raid5_private_data { atomic_t active_stripes; struct list_head inactive_list; wait_queue_head_t wait_for_stripe; + wait_queue_head_t wait_for_overlap; int inactive_blocked; /* release of inactive stripes blocked, * waiting for 25% to be free */ |
