Merge branch 'akpm' (patches from Andrew)
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 9 Sep 2015 00:52:23 +0000 (17:52 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 9 Sep 2015 00:52:23 +0000 (17:52 -0700)
Merge second patch-bomb from Andrew Morton:
 "Almost all of the rest of MM.  There was an unusually large amount of
  MM material this time"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (141 commits)
  zpool: remove no-op module init/exit
  mm: zbud: constify the zbud_ops
  mm: zpool: constify the zpool_ops
  mm: swap: zswap: maybe_preload & refactoring
  zram: unify error reporting
  zsmalloc: remove null check from destroy_handle_cache()
  zsmalloc: do not take class lock in zs_shrinker_count()
  zsmalloc: use class->pages_per_zspage
  zsmalloc: consider ZS_ALMOST_FULL as migrate source
  zsmalloc: partial page ordering within a fullness_list
  zsmalloc: use shrinker to trigger auto-compaction
  zsmalloc: account the number of compacted pages
  zsmalloc/zram: introduce zs_pool_stats api
  zsmalloc: cosmetic compaction code adjustments
  zsmalloc: introduce zs_can_compact() function
  zsmalloc: always keep per-class stats
  zsmalloc: drop unused variable `nr_to_migrate'
  mm/memblock.c: fix comment in __next_mem_range()
  mm/page_alloc.c: fix type information of memoryless node
  memory-hotplug: fix comments in zone_spanned_pages_in_node() and zone_spanned_pages_in_node()
  ...

1  2 
fs/block_dev.c
fs/dax.c
include/asm-generic/early_ioremap.h
include/linux/mm.h
mm/early_ioremap.c
mm/page_alloc.c
tools/testing/selftests/vm/userfaultfd.c

diff --cc fs/block_dev.c
Simple merge
diff --cc fs/dax.c
index 57bb70b4af70f75f422dff8beff13ce7545e2b61,ed54efedade621c86facd108f91dfa623ed958a5..e43389c74bbcea88956b0c5972f72e94cef58313
+++ b/fs/dax.c
@@@ -283,10 -272,9 +283,9 @@@ static int copy_user_bh(struct page *to
  static int dax_insert_mapping(struct inode *inode, struct buffer_head *bh,
                        struct vm_area_struct *vma, struct vm_fault *vmf)
  {
-       struct address_space *mapping = inode->i_mapping;
        sector_t sector = bh->b_blocknr << (inode->i_blkbits - 9);
        unsigned long vaddr = (unsigned long)vmf->virtual_address;
 -      void *addr;
 +      void __pmem *addr;
        unsigned long pfn;
        pgoff_t size;
        int error;
Simple merge
index 1171a292e06e48813e79349d7bc82bba675710f7,11df1a8ea38bd81c0f428fb625e481dddb30482f..f25a957bf0ab68967cc57d5f7d9472831f65cad2
@@@ -359,27 -349,8 +349,15 @@@ static inline int get_page_unless_zero(
        return atomic_inc_not_zero(&page->_count);
  }
  
- /*
-  * Try to drop a ref unless the page has a refcount of one, return false if
-  * that is the case.
-  * This is to make sure that the refcount won't become zero after this drop.
-  * This can be called when MMU is off so it must not access
-  * any of the virtual mappings.
-  */
- static inline int put_page_unless_one(struct page *page)
- {
-       return atomic_add_unless(&page->_count, -1, 1);
- }
  extern int page_is_ram(unsigned long pfn);
 -extern int region_is_ram(resource_size_t phys_addr, unsigned long size);
 +
 +enum {
 +      REGION_INTERSECTS,
 +      REGION_DISJOINT,
 +      REGION_MIXED,
 +};
 +
 +int region_intersects(resource_size_t offset, size_t size, const char *type);
  
  /* Support for virtually mapped pages */
  struct page *vmalloc_to_page(const void *addr);
index 0cfadafb3fb00bd9cccb373449857443c443f3a6,a0baeb4be934b3737493d6ad3638a81c8fec879e..23f744d77ce0022dbb46bd0232904851094f75e6
@@@ -217,13 -217,28 +217,35 @@@ early_memremap(resource_size_t phys_add
        return (__force void *)__early_ioremap(phys_addr, size,
                                               FIXMAP_PAGE_NORMAL);
  }
 +#ifdef FIXMAP_PAGE_RO
 +void __init *
 +early_memremap_ro(resource_size_t phys_addr, unsigned long size)
 +{
 +      return (__force void *)__early_ioremap(phys_addr, size, FIXMAP_PAGE_RO);
 +}
 +#endif
+ #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT)
+ void __init copy_from_early_mem(void *dest, phys_addr_t src, unsigned long size)
+ {
+       unsigned long slop, clen;
+       char *p;
+       while (size) {
+               slop = src & ~PAGE_MASK;
+               clen = size;
+               if (clen > MAX_MAP_CHUNK - slop)
+                       clen = MAX_MAP_CHUNK - slop;
+               p = early_memremap(src & PAGE_MASK, clen + slop);
+               memcpy(dest, p + slop, clen);
+               early_memunmap(p, clen + slop);
+               dest += clen;
+               src += clen;
+               size -= clen;
+       }
+ }
  #else /* CONFIG_MMU */
  
  void __init __iomem *
diff --cc mm/page_alloc.c
Simple merge