From 5376f07eacf99d9d51f88ea301dd99be35088eb0 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 27 Oct 2010 03:41:03 -0400 Subject: [PATCH] --- yaml --- r: 252739 b: refs/heads/master c: 091c75985e2f3d1b60eb25d577f04923c1b8e022 h: refs/heads/master i: 252737: 547dc035291531ac91c522a019323e878d5f6d9b 252735: c72970212ecfaeafc6a1f3c824dea4f471a53a92 v: v3 --- [refs] | 2 +- trunk/arch/blackfin/include/asm/bfin_serial.h | 6 +++--- trunk/drivers/scsi/scsi_proc.c | 5 +++++ trunk/mm/rmap.c | 17 +++++++---------- trunk/mm/shmem.c | 2 +- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index 9fbd882f0694..3f525856c02a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5be7ef002469eaf757065ee16b4100c6d3ead1cc +refs/heads/master: 091c75985e2f3d1b60eb25d577f04923c1b8e022 diff --git a/trunk/arch/blackfin/include/asm/bfin_serial.h b/trunk/arch/blackfin/include/asm/bfin_serial.h index 7dbc664eab1e..7fd0ec7b5b0f 100644 --- a/trunk/arch/blackfin/include/asm/bfin_serial.h +++ b/trunk/arch/blackfin/include/asm/bfin_serial.h @@ -184,7 +184,7 @@ struct bfin_uart_regs { #undef __BFP #ifndef port_membase -# define port_membase(p) (((struct bfin_serial_port *)(p))->port.membase) +# define port_membase(p) 0 #endif #define UART_GET_CHAR(p) bfin_read16(port_membase(p) + OFFSET_RBR) @@ -235,10 +235,10 @@ struct bfin_uart_regs { #define UART_SET_DLAB(p) do { UART_PUT_LCR(p, UART_GET_LCR(p) | DLAB); SSYNC(); } while (0) #ifndef put_lsr_cache -# define put_lsr_cache(p, v) (((struct bfin_serial_port *)(p))->lsr = (v)) +# define put_lsr_cache(p, v) #endif #ifndef get_lsr_cache -# define get_lsr_cache(p) (((struct bfin_serial_port *)(p))->lsr) +# define get_lsr_cache(p) 0 #endif /* The hardware clears the LSR bits upon read, so we need to cache diff --git a/trunk/drivers/scsi/scsi_proc.c b/trunk/drivers/scsi/scsi_proc.c index ad747dc337da..f46855cd853d 100644 --- a/trunk/drivers/scsi/scsi_proc.c +++ b/trunk/drivers/scsi/scsi_proc.c @@ -381,6 +381,11 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf, return err; } +/** + * proc_scsi_show - show contents of /proc/scsi/scsi (attached devices) + * @s: output goes here + * @p: not used + */ static int always_match(struct device *dev, void *data) { return 1; diff --git a/trunk/mm/rmap.c b/trunk/mm/rmap.c index 6bada99cd61c..3a39b518a653 100644 --- a/trunk/mm/rmap.c +++ b/trunk/mm/rmap.c @@ -405,7 +405,6 @@ struct anon_vma *page_get_anon_vma(struct page *page) struct anon_vma *page_lock_anon_vma(struct page *page) { struct anon_vma *anon_vma = NULL; - struct anon_vma *root_anon_vma; unsigned long anon_mapping; rcu_read_lock(); @@ -416,15 +415,13 @@ struct anon_vma *page_lock_anon_vma(struct page *page) goto out; anon_vma = (struct anon_vma *) (anon_mapping - PAGE_MAPPING_ANON); - root_anon_vma = ACCESS_ONCE(anon_vma->root); - if (mutex_trylock(&root_anon_vma->mutex)) { + if (mutex_trylock(&anon_vma->root->mutex)) { /* - * If the page is still mapped, then this anon_vma is still - * its anon_vma, and holding the mutex ensures that it will - * not go away, see __put_anon_vma(). + * If we observe a !0 refcount, then holding the lock ensures + * the anon_vma will not go away, see __put_anon_vma(). */ - if (!page_mapped(page)) { - mutex_unlock(&root_anon_vma->mutex); + if (!atomic_read(&anon_vma->refcount)) { + anon_vma_unlock(anon_vma); anon_vma = NULL; } goto out; @@ -1017,7 +1014,7 @@ void do_page_add_anon_rmap(struct page *page, return; VM_BUG_ON(!PageLocked(page)); - /* address might be in next vma when migration races vma_adjust */ + VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end); if (first) __page_set_anon_rmap(page, vma, address, exclusive); else @@ -1712,7 +1709,7 @@ void hugepage_add_anon_rmap(struct page *page, BUG_ON(!PageLocked(page)); BUG_ON(!anon_vma); - /* address might be in next vma when migration races vma_adjust */ + BUG_ON(address < vma->vm_start || address >= vma->vm_end); first = atomic_inc_and_test(&page->_mapcount); if (first) __hugepage_set_anon_rmap(page, vma, address, 0); diff --git a/trunk/mm/shmem.c b/trunk/mm/shmem.c index d221a1cfd7b1..1acfb2687bfa 100644 --- a/trunk/mm/shmem.c +++ b/trunk/mm/shmem.c @@ -1114,8 +1114,8 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc) delete_from_page_cache(page); shmem_swp_set(info, entry, swap.val); shmem_swp_unmap(entry); - swap_shmem_alloc(swap); spin_unlock(&info->lock); + swap_shmem_alloc(swap); BUG_ON(page_mapped(page)); swap_writepage(page, wbc); return 0;