Merge getxattr prototype change into work.lookups
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 2 May 2016 23:45:47 +0000 (19:45 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 2 May 2016 23:45:47 +0000 (19:45 -0400)
The rest of work.xattr stuff isn't needed for this branch

21 files changed:
1  2 
drivers/staging/lustre/lustre/llite/llite_internal.h
fs/btrfs/tree-log.c
fs/cifs/inode.c
fs/ecryptfs/crypto.c
fs/ecryptfs/inode.c
fs/ecryptfs/mmap.c
fs/ext2/namei.c
fs/f2fs/namei.c
fs/hfsplus/xattr.c
fs/libfs.c
fs/namei.c
fs/nfs/direct.c
fs/nilfs2/namei.c
fs/ocfs2/file.c
fs/orangefs/xattr.c
fs/overlayfs/super.c
fs/reiserfs/file.c
fs/reiserfs/xattr.c
fs/ubifs/ubifs.h
include/linux/fs.h
mm/shmem.c

index e3c0f1dd4d3130471cddea4a547f3e3773ae755f,d28efd27af57f4c707f3761559437f06aec7b05b..65a6acec663b1009601d277018a4802f6479aa01
@@@ -310,10 -310,10 +310,10 @@@ static inline struct ll_inode_info *ll_
  /* default to about 40meg of readahead on a given system.  That much tied
   * up in 512k readahead requests serviced at 40ms each is about 1GB/s.
   */
 -#define SBI_DEFAULT_READAHEAD_MAX (40UL << (20 - PAGE_CACHE_SHIFT))
 +#define SBI_DEFAULT_READAHEAD_MAX (40UL << (20 - PAGE_SHIFT))
  
  /* default to read-ahead full files smaller than 2MB on the second read */
 -#define SBI_DEFAULT_READAHEAD_WHOLE_MAX (2UL << (20 - PAGE_CACHE_SHIFT))
 +#define SBI_DEFAULT_READAHEAD_WHOLE_MAX (2UL << (20 - PAGE_SHIFT))
  
  enum ra_stat {
        RA_STAT_HIT = 0,
@@@ -975,13 -975,13 +975,13 @@@ struct vm_area_struct *our_vma(struct m
  static inline void ll_invalidate_page(struct page *vmpage)
  {
        struct address_space *mapping = vmpage->mapping;
 -      loff_t offset = vmpage->index << PAGE_CACHE_SHIFT;
 +      loff_t offset = vmpage->index << PAGE_SHIFT;
  
        LASSERT(PageLocked(vmpage));
        if (!mapping)
                return;
  
 -      ll_teardown_mmaps(mapping, offset, offset + PAGE_CACHE_SIZE);
 +      ll_teardown_mmaps(mapping, offset, offset + PAGE_SIZE);
        truncate_complete_page(mapping, vmpage);
  }
  
@@@ -1042,8 -1042,8 +1042,8 @@@ static inline __u64 ll_file_maxbytes(st
  /* llite/xattr.c */
  int ll_setxattr(struct dentry *dentry, const char *name,
                const void *value, size_t size, int flags);
- ssize_t ll_getxattr(struct dentry *dentry, const char *name,
-                   void *buffer, size_t size);
+ ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode,
+                   const char *name, void *buffer, size_t size);
  ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size);
  int ll_removexattr(struct dentry *dentry, const char *name);
  
diff --combined fs/btrfs/tree-log.c
index 517d0ccb351e205a4f415c15c4735c3a76647b91,a82e20ecbee1672b4086bb4ffcbfedbe8274f438..e692eea87af6dcbc198a8dde589cd88fcf622a63
@@@ -4415,127 -4415,6 +4415,127 @@@ static int btrfs_log_trailing_hole(stru
        return ret;
  }
  
 +/*
 + * When we are logging a new inode X, check if it doesn't have a reference that
 + * matches the reference from some other inode Y created in a past transaction
 + * and that was renamed in the current transaction. If we don't do this, then at
 + * log replay time we can lose inode Y (and all its files if it's a directory):
 + *
 + * mkdir /mnt/x
 + * echo "hello world" > /mnt/x/foobar
 + * sync
 + * mv /mnt/x /mnt/y
 + * mkdir /mnt/x                 # or touch /mnt/x
 + * xfs_io -c fsync /mnt/x
 + * <power fail>
 + * mount fs, trigger log replay
 + *
 + * After the log replay procedure, we would lose the first directory and all its
 + * files (file foobar).
 + * For the case where inode Y is not a directory we simply end up losing it:
 + *
 + * echo "123" > /mnt/foo
 + * sync
 + * mv /mnt/foo /mnt/bar
 + * echo "abc" > /mnt/foo
 + * xfs_io -c fsync /mnt/foo
 + * <power fail>
 + *
 + * We also need this for cases where a snapshot entry is replaced by some other
 + * entry (file or directory) otherwise we end up with an unreplayable log due to
 + * attempts to delete the snapshot entry (entry of type BTRFS_ROOT_ITEM_KEY) as
 + * if it were a regular entry:
 + *
 + * mkdir /mnt/x
 + * btrfs subvolume snapshot /mnt /mnt/x/snap
 + * btrfs subvolume delete /mnt/x/snap
 + * rmdir /mnt/x
 + * mkdir /mnt/x
 + * fsync /mnt/x or fsync some new file inside it
 + * <power fail>
 + *
 + * The snapshot delete, rmdir of x, mkdir of a new x and the fsync all happen in
 + * the same transaction.
 + */
 +static int btrfs_check_ref_name_override(struct extent_buffer *eb,
 +                                       const int slot,
 +                                       const struct btrfs_key *key,
 +                                       struct inode *inode)
 +{
 +      int ret;
 +      struct btrfs_path *search_path;
 +      char *name = NULL;
 +      u32 name_len = 0;
 +      u32 item_size = btrfs_item_size_nr(eb, slot);
 +      u32 cur_offset = 0;
 +      unsigned long ptr = btrfs_item_ptr_offset(eb, slot);
 +
 +      search_path = btrfs_alloc_path();
 +      if (!search_path)
 +              return -ENOMEM;
 +      search_path->search_commit_root = 1;
 +      search_path->skip_locking = 1;
 +
 +      while (cur_offset < item_size) {
 +              u64 parent;
 +              u32 this_name_len;
 +              u32 this_len;
 +              unsigned long name_ptr;
 +              struct btrfs_dir_item *di;
 +
 +              if (key->type == BTRFS_INODE_REF_KEY) {
 +                      struct btrfs_inode_ref *iref;
 +
 +                      iref = (struct btrfs_inode_ref *)(ptr + cur_offset);
 +                      parent = key->offset;
 +                      this_name_len = btrfs_inode_ref_name_len(eb, iref);
 +                      name_ptr = (unsigned long)(iref + 1);
 +                      this_len = sizeof(*iref) + this_name_len;
 +              } else {
 +                      struct btrfs_inode_extref *extref;
 +
 +                      extref = (struct btrfs_inode_extref *)(ptr +
 +                                                             cur_offset);
 +                      parent = btrfs_inode_extref_parent(eb, extref);
 +                      this_name_len = btrfs_inode_extref_name_len(eb, extref);
 +                      name_ptr = (unsigned long)&extref->name;
 +                      this_len = sizeof(*extref) + this_name_len;
 +              }
 +
 +              if (this_name_len > name_len) {
 +                      char *new_name;
 +
 +                      new_name = krealloc(name, this_name_len, GFP_NOFS);
 +                      if (!new_name) {
 +                              ret = -ENOMEM;
 +                              goto out;
 +                      }
 +                      name_len = this_name_len;
 +                      name = new_name;
 +              }
 +
 +              read_extent_buffer(eb, name, name_ptr, this_name_len);
 +              di = btrfs_lookup_dir_item(NULL, BTRFS_I(inode)->root,
 +                                         search_path, parent,
 +                                         name, this_name_len, 0);
 +              if (di && !IS_ERR(di)) {
 +                      ret = 1;
 +                      goto out;
 +              } else if (IS_ERR(di)) {
 +                      ret = PTR_ERR(di);
 +                      goto out;
 +              }
 +              btrfs_release_path(search_path);
 +
 +              cur_offset += this_len;
 +      }
 +      ret = 0;
 +out:
 +      btrfs_free_path(search_path);
 +      kfree(name);
 +      return ret;
 +}
 +
  /* log a single inode in the tree log.
   * At least one parent directory for this inode must exist in the tree
   * or be logged already.
@@@ -4723,22 -4602,6 +4723,22 @@@ again
                if (min_key.type == BTRFS_INODE_ITEM_KEY)
                        need_log_inode_item = false;
  
 +              if ((min_key.type == BTRFS_INODE_REF_KEY ||
 +                   min_key.type == BTRFS_INODE_EXTREF_KEY) &&
 +                  BTRFS_I(inode)->generation == trans->transid) {
 +                      ret = btrfs_check_ref_name_override(path->nodes[0],
 +                                                          path->slots[0],
 +                                                          &min_key, inode);
 +                      if (ret < 0) {
 +                              err = ret;
 +                              goto out_unlock;
 +                      } else if (ret > 0) {
 +                              err = 1;
 +                              btrfs_set_log_full_commit(root->fs_info, trans);
 +                              goto out_unlock;
 +                      }
 +              }
 +
                /* Skip xattrs, we log them later with btrfs_log_all_xattrs() */
                if (min_key.type == BTRFS_XATTR_ITEM_KEY) {
                        if (ins_nr == 0)
@@@ -4988,7 -4851,7 +4988,7 @@@ static noinline int check_parent_dirs_f
                        goto out;
  
        if (!S_ISDIR(inode->i_mode)) {
-               if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
+               if (!parent || d_really_is_negative(parent) || sb != parent->d_sb)
                        goto out;
                inode = d_inode(parent);
        }
                        break;
                }
  
-               if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
+               if (!parent || d_really_is_negative(parent) || sb != parent->d_sb)
                        break;
  
                if (IS_ROOT(parent))
@@@ -5422,7 -5285,7 +5422,7 @@@ static int btrfs_log_inode_parent(struc
        }
  
        while (1) {
-               if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
+               if (!parent || d_really_is_negative(parent) || sb != parent->d_sb)
                        break;
  
                inode = d_inode(parent);
diff --combined fs/cifs/inode.c
index 5f9ad5c42180909e4aeeb2ab9edc68e41a478559,4cd4705ebfadb8a62dc287c79ef567011f1d2dd7..514dadb0575d5fd9f5698c8bde27a4a362a2b785
@@@ -59,7 -59,7 +59,7 @@@ static void cifs_set_ops(struct inode *
  
                /* check if server can support readpages */
                if (cifs_sb_master_tcon(cifs_sb)->ses->server->maxBuf <
 -                              PAGE_CACHE_SIZE + MAX_CIFS_HDR_SIZE)
 +                              PAGE_SIZE + MAX_CIFS_HDR_SIZE)
                        inode->i_data.a_ops = &cifs_addr_ops_smallbuf;
                else
                        inode->i_data.a_ops = &cifs_addr_ops;
@@@ -2019,8 -2019,8 +2019,8 @@@ int cifs_getattr(struct vfsmount *mnt, 
  
  static int cifs_truncate_page(struct address_space *mapping, loff_t from)
  {
 -      pgoff_t index = from >> PAGE_CACHE_SHIFT;
 -      unsigned offset = from & (PAGE_CACHE_SIZE - 1);
 +      pgoff_t index = from >> PAGE_SHIFT;
 +      unsigned offset = from & (PAGE_SIZE - 1);
        struct page *page;
        int rc = 0;
  
        if (!page)
                return -ENOMEM;
  
 -      zero_user_segment(page, offset, PAGE_CACHE_SIZE);
 +      zero_user_segment(page, offset, PAGE_SIZE);
        unlock_page(page);
 -      page_cache_release(page);
 +      put_page(page);
        return rc;
  }
  
@@@ -2418,8 -2418,7 +2418,7 @@@ cifs_setattr_exit
  int
  cifs_setattr(struct dentry *direntry, struct iattr *attrs)
  {
-       struct inode *inode = d_inode(direntry);
-       struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
+       struct cifs_sb_info *cifs_sb = CIFS_SB(direntry->d_sb);
        struct cifs_tcon *pTcon = cifs_sb_master_tcon(cifs_sb);
  
        if (pTcon->unix_ext)
diff --combined fs/ecryptfs/crypto.c
index d09cb4cdd09f18e56e0f4135d810c732cc609365,543a146ee0192edd2246c823bdad60e78d6464d0..8710093aae5e7025354a7b22775228013b8df698
@@@ -286,7 -286,7 +286,7 @@@ int virt_to_scatterlist(const void *add
                pg = virt_to_page(addr);
                offset = offset_in_page(addr);
                sg_set_page(&sg[i], pg, 0, offset);
 -              remainder_of_page = PAGE_CACHE_SIZE - offset;
 +              remainder_of_page = PAGE_SIZE - offset;
                if (size >= remainder_of_page) {
                        sg[i].length = remainder_of_page;
                        addr += remainder_of_page;
@@@ -400,7 -400,7 +400,7 @@@ static loff_t lower_offset_for_page(str
                                    struct page *page)
  {
        return ecryptfs_lower_header_size(crypt_stat) +
 -             ((loff_t)page->index << PAGE_CACHE_SHIFT);
 +             ((loff_t)page->index << PAGE_SHIFT);
  }
  
  /**
@@@ -428,7 -428,7 +428,7 @@@ static int crypt_extent(struct ecryptfs
        size_t extent_size = crypt_stat->extent_size;
        int rc;
  
 -      extent_base = (((loff_t)page_index) * (PAGE_CACHE_SIZE / extent_size));
 +      extent_base = (((loff_t)page_index) * (PAGE_SIZE / extent_size));
        rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
                                (extent_base + extent_offset));
        if (rc) {
@@@ -498,7 -498,7 +498,7 @@@ int ecryptfs_encrypt_page(struct page *
        }
  
        for (extent_offset = 0;
 -           extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
 +           extent_offset < (PAGE_SIZE / crypt_stat->extent_size);
             extent_offset++) {
                rc = crypt_extent(crypt_stat, enc_extent_page, page,
                                  extent_offset, ENCRYPT);
        lower_offset = lower_offset_for_page(crypt_stat, page);
        enc_extent_virt = kmap(enc_extent_page);
        rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt, lower_offset,
 -                                PAGE_CACHE_SIZE);
 +                                PAGE_SIZE);
        kunmap(enc_extent_page);
        if (rc < 0) {
                ecryptfs_printk(KERN_ERR,
@@@ -560,7 -560,7 +560,7 @@@ int ecryptfs_decrypt_page(struct page *
  
        lower_offset = lower_offset_for_page(crypt_stat, page);
        page_virt = kmap(page);
 -      rc = ecryptfs_read_lower(page_virt, lower_offset, PAGE_CACHE_SIZE,
 +      rc = ecryptfs_read_lower(page_virt, lower_offset, PAGE_SIZE,
                                 ecryptfs_inode);
        kunmap(page);
        if (rc < 0) {
        }
  
        for (extent_offset = 0;
 -           extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
 +           extent_offset < (PAGE_SIZE / crypt_stat->extent_size);
             extent_offset++) {
                rc = crypt_extent(crypt_stat, page, page,
                                  extent_offset, DECRYPT);
@@@ -659,11 -659,11 +659,11 @@@ void ecryptfs_set_default_sizes(struct 
        if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
                crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
        else {
 -              if (PAGE_CACHE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)
 +              if (PAGE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)
                        crypt_stat->metadata_size =
                                ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
                else
 -                      crypt_stat->metadata_size = PAGE_CACHE_SIZE;
 +                      crypt_stat->metadata_size = PAGE_SIZE;
        }
  }
  
@@@ -1369,7 -1369,9 +1369,9 @@@ int ecryptfs_read_xattr_region(char *pa
        ssize_t size;
        int rc = 0;
  
-       size = ecryptfs_getxattr_lower(lower_dentry, ECRYPTFS_XATTR_NAME,
+       size = ecryptfs_getxattr_lower(lower_dentry,
+                                      ecryptfs_inode_to_lower(ecryptfs_inode),
+                                      ECRYPTFS_XATTR_NAME,
                                       page_virt, ECRYPTFS_DEFAULT_EXTENT_SIZE);
        if (size < 0) {
                if (unlikely(ecryptfs_verbosity > 0))
@@@ -1391,6 -1393,7 +1393,7 @@@ int ecryptfs_read_and_validate_xattr_re
        int rc;
  
        rc = ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry),
+                                    ecryptfs_inode_to_lower(inode),
                                     ECRYPTFS_XATTR_NAME, file_size,
                                     ECRYPTFS_SIZE_AND_MARKER_BYTES);
        if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
@@@ -1442,7 -1445,7 +1445,7 @@@ int ecryptfs_read_metadata(struct dentr
                                                ECRYPTFS_VALIDATE_HEADER_SIZE);
        if (rc) {
                /* metadata is not in the file header, so try xattrs */
 -              memset(page_virt, 0, PAGE_CACHE_SIZE);
 +              memset(page_virt, 0, PAGE_SIZE);
                rc = ecryptfs_read_xattr_region(page_virt, ecryptfs_inode);
                if (rc) {
                        printk(KERN_DEBUG "Valid eCryptfs headers not found in "
        }
  out:
        if (page_virt) {
 -              memset(page_virt, 0, PAGE_CACHE_SIZE);
 +              memset(page_virt, 0, PAGE_SIZE);
                kmem_cache_free(ecryptfs_header_cache, page_virt);
        }
        return rc;
diff --combined fs/ecryptfs/inode.c
index 224b49e71aa437ff36aa79bf111c1e536a9a625d,1ac631cd9d84d85874de72e9ad4e5b0acf552750..9323c536b2f2e72d59fa5292d6964be62165b63b
@@@ -763,10 -763,10 +763,10 @@@ static int truncate_upper(struct dentr
        } else { /* ia->ia_size < i_size_read(inode) */
                /* We're chopping off all the pages down to the page
                 * in which ia->ia_size is located. Fill in the end of
 -               * that page from (ia->ia_size & ~PAGE_CACHE_MASK) to
 -               * PAGE_CACHE_SIZE with zeros. */
 -              size_t num_zeros = (PAGE_CACHE_SIZE
 -                                  - (ia->ia_size & ~PAGE_CACHE_MASK));
 +               * that page from (ia->ia_size & ~PAGE_MASK) to
 +               * PAGE_SIZE with zeros. */
 +              size_t num_zeros = (PAGE_SIZE
 +                                  - (ia->ia_size & ~PAGE_MASK));
  
                if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
                        truncate_setsize(inode, ia->ia_size);
  }
  
  ssize_t
- ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name,
-                       void *value, size_t size)
+ ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode,
+                       const char *name, void *value, size_t size)
  {
        int rc = 0;
  
-       if (!d_inode(lower_dentry)->i_op->getxattr) {
+       if (!lower_inode->i_op->getxattr) {
                rc = -EOPNOTSUPP;
                goto out;
        }
-       inode_lock(d_inode(lower_dentry));
-       rc = d_inode(lower_dentry)->i_op->getxattr(lower_dentry, name, value,
-                                                  size);
-       inode_unlock(d_inode(lower_dentry));
+       inode_lock(lower_inode);
+       rc = lower_inode->i_op->getxattr(lower_dentry, lower_inode,
+                                        name, value, size);
+       inode_unlock(lower_inode);
  out:
        return rc;
  }
  
  static ssize_t
- ecryptfs_getxattr(struct dentry *dentry, const char *name, void *value,
-                 size_t size)
+ ecryptfs_getxattr(struct dentry *dentry, struct inode *inode,
+                 const char *name, void *value, size_t size)
  {
-       return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), name,
-                                      value, size);
+       return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry),
+                                      ecryptfs_inode_to_lower(inode),
+                                      name, value, size);
  }
  
  static ssize_t
diff --combined fs/ecryptfs/mmap.c
index e6b1d80952b91d7dda9a3689fe018cf215ec5a11,39e4381d3a65fcb0aee5fe985dfcadaceefcae08..148d11b514fb4f04435993086bee782de361f5ad
@@@ -122,7 -122,7 +122,7 @@@ ecryptfs_copy_up_encrypted_with_header(
                                       struct ecryptfs_crypt_stat *crypt_stat)
  {
        loff_t extent_num_in_page = 0;
 -      loff_t num_extents_per_page = (PAGE_CACHE_SIZE
 +      loff_t num_extents_per_page = (PAGE_SIZE
                                       / crypt_stat->extent_size);
        int rc = 0;
  
                        char *page_virt;
  
                        page_virt = kmap_atomic(page);
 -                      memset(page_virt, 0, PAGE_CACHE_SIZE);
 +                      memset(page_virt, 0, PAGE_SIZE);
                        /* TODO: Support more than one header extent */
                        if (view_extent_num == 0) {
                                size_t written;
                                 - crypt_stat->metadata_size);
  
                        rc = ecryptfs_read_lower_page_segment(
 -                              page, (lower_offset >> PAGE_CACHE_SHIFT),
 -                              (lower_offset & ~PAGE_CACHE_MASK),
 +                              page, (lower_offset >> PAGE_SHIFT),
 +                              (lower_offset & ~PAGE_MASK),
                                crypt_stat->extent_size, page->mapping->host);
                        if (rc) {
                                printk(KERN_ERR "%s: Error attempting to read "
@@@ -198,7 -198,7 +198,7 @@@ static int ecryptfs_readpage(struct fil
  
        if (!crypt_stat || !(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
                rc = ecryptfs_read_lower_page_segment(page, page->index, 0,
 -                                                    PAGE_CACHE_SIZE,
 +                                                    PAGE_SIZE,
                                                      page->mapping->host);
        } else if (crypt_stat->flags & ECRYPTFS_VIEW_AS_ENCRYPTED) {
                if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) {
  
                } else {
                        rc = ecryptfs_read_lower_page_segment(
 -                              page, page->index, 0, PAGE_CACHE_SIZE,
 +                              page, page->index, 0, PAGE_SIZE,
                                page->mapping->host);
                        if (rc) {
                                printk(KERN_ERR "Error reading page; rc = "
@@@ -250,12 -250,12 +250,12 @@@ static int fill_zeros_to_end_of_page(st
        struct inode *inode = page->mapping->host;
        int end_byte_in_page;
  
 -      if ((i_size_read(inode) / PAGE_CACHE_SIZE) != page->index)
 +      if ((i_size_read(inode) / PAGE_SIZE) != page->index)
                goto out;
 -      end_byte_in_page = i_size_read(inode) % PAGE_CACHE_SIZE;
 +      end_byte_in_page = i_size_read(inode) % PAGE_SIZE;
        if (to > end_byte_in_page)
                end_byte_in_page = to;
 -      zero_user_segment(page, end_byte_in_page, PAGE_CACHE_SIZE);
 +      zero_user_segment(page, end_byte_in_page, PAGE_SIZE);
  out:
        return 0;
  }
@@@ -279,7 -279,7 +279,7 @@@ static int ecryptfs_write_begin(struct 
                        loff_t pos, unsigned len, unsigned flags,
                        struct page **pagep, void **fsdata)
  {
 -      pgoff_t index = pos >> PAGE_CACHE_SHIFT;
 +      pgoff_t index = pos >> PAGE_SHIFT;
        struct page *page;
        loff_t prev_page_end_size;
        int rc = 0;
                return -ENOMEM;
        *pagep = page;
  
 -      prev_page_end_size = ((loff_t)index << PAGE_CACHE_SHIFT);
 +      prev_page_end_size = ((loff_t)index << PAGE_SHIFT);
        if (!PageUptodate(page)) {
                struct ecryptfs_crypt_stat *crypt_stat =
                        &ecryptfs_inode_to_private(mapping->host)->crypt_stat;
  
                if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
                        rc = ecryptfs_read_lower_page_segment(
 -                              page, index, 0, PAGE_CACHE_SIZE, mapping->host);
 +                              page, index, 0, PAGE_SIZE, mapping->host);
                        if (rc) {
                                printk(KERN_ERR "%s: Error attempting to read "
                                       "lower page segment; rc = [%d]\n",
                                SetPageUptodate(page);
                        } else {
                                rc = ecryptfs_read_lower_page_segment(
 -                                      page, index, 0, PAGE_CACHE_SIZE,
 +                                      page, index, 0, PAGE_SIZE,
                                        mapping->host);
                                if (rc) {
                                        printk(KERN_ERR "%s: Error reading "
                } else {
                        if (prev_page_end_size
                            >= i_size_read(page->mapping->host)) {
 -                              zero_user(page, 0, PAGE_CACHE_SIZE);
 +                              zero_user(page, 0, PAGE_SIZE);
                                SetPageUptodate(page);
 -                      } else if (len < PAGE_CACHE_SIZE) {
 +                      } else if (len < PAGE_SIZE) {
                                rc = ecryptfs_decrypt_page(page);
                                if (rc) {
                                        printk(KERN_ERR "%s: Error decrypting "
         * of page?  Zero it out. */
        if ((i_size_read(mapping->host) == prev_page_end_size)
            && (pos != 0))
 -              zero_user(page, 0, PAGE_CACHE_SIZE);
 +              zero_user(page, 0, PAGE_SIZE);
  out:
        if (unlikely(rc)) {
                unlock_page(page);
 -              page_cache_release(page);
 +              put_page(page);
                *pagep = NULL;
        }
        return rc;
@@@ -436,8 -436,9 +436,9 @@@ static int ecryptfs_write_inode_size_to
                goto out;
        }
        inode_lock(lower_inode);
-       size = lower_inode->i_op->getxattr(lower_dentry, ECRYPTFS_XATTR_NAME,
+       size = lower_inode->i_op->getxattr(lower_dentry, lower_inode,
+                                          ECRYPTFS_XATTR_NAME,
 -                                         xattr_virt, PAGE_CACHE_SIZE);
 +                                         xattr_virt, PAGE_SIZE);
        if (size < 0)
                size = 8;
        put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt);
@@@ -479,8 -480,8 +480,8 @@@ static int ecryptfs_write_end(struct fi
                        loff_t pos, unsigned len, unsigned copied,
                        struct page *page, void *fsdata)
  {
 -      pgoff_t index = pos >> PAGE_CACHE_SHIFT;
 -      unsigned from = pos & (PAGE_CACHE_SIZE - 1);
 +      pgoff_t index = pos >> PAGE_SHIFT;
 +      unsigned from = pos & (PAGE_SIZE - 1);
        unsigned to = from + copied;
        struct inode *ecryptfs_inode = mapping->host;
        struct ecryptfs_crypt_stat *crypt_stat =
                goto out;
        }
        if (!PageUptodate(page)) {
 -              if (copied < PAGE_CACHE_SIZE) {
 +              if (copied < PAGE_SIZE) {
                        rc = 0;
                        goto out;
                }
                rc = copied;
  out:
        unlock_page(page);
 -      page_cache_release(page);
 +      put_page(page);
        return rc;
  }
  
diff --combined fs/ext2/namei.c
index d34843925b23f17485bb24114439b81164826122,1a7eb49a115d39c52e560b387aaaf60a54ea602e..d446203127fcfd47ee08694c5f9e884938f9c4a2
@@@ -82,7 -82,7 +82,7 @@@ struct dentry *ext2_get_parent(struct d
        unsigned long ino = ext2_inode_by_name(d_inode(child), &dotdot);
        if (!ino)
                return ERR_PTR(-ENOENT);
-       return d_obtain_alias(ext2_iget(d_inode(child)->i_sb, ino));
+       return d_obtain_alias(ext2_iget(child->d_sb, ino));
  } 
  
  /*
@@@ -398,7 -398,7 +398,7 @@@ static int ext2_rename (struct inode * 
                        ext2_set_link(old_inode, dir_de, dir_page, new_dir, 0);
                else {
                        kunmap(dir_page);
 -                      page_cache_release(dir_page);
 +                      put_page(dir_page);
                }
                inode_dec_link_count(old_dir);
        }
  out_dir:
        if (dir_de) {
                kunmap(dir_page);
 -              page_cache_release(dir_page);
 +              put_page(dir_page);
        }
  out_old:
        kunmap(old_page);
 -      page_cache_release(old_page);
 +      put_page(old_page);
  out:
        return err;
  }
diff --combined fs/f2fs/namei.c
index 013e57932d615fec6dcc8ce1f2246cd0a0a36c0e,db874ad3514a7a8bde574203315c2b48672ba122..324ed3812f30e906cdb5d9c2a6135135b5035dc4
@@@ -202,7 -202,7 +202,7 @@@ struct dentry *f2fs_get_parent(struct d
        unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot);
        if (!ino)
                return ERR_PTR(-ENOENT);
-       return d_obtain_alias(f2fs_iget(d_inode(child)->i_sb, ino));
+       return d_obtain_alias(f2fs_iget(child->d_sb, ino));
  }
  
  static int __recover_dot_dentries(struct inode *dir, nid_t pino)
@@@ -1027,6 -1027,12 +1027,6 @@@ static const char *f2fs_encrypted_get_l
                goto errout;
        }
  
 -      /* this is broken symlink case */
 -      if (unlikely(cstr.name[0] == 0)) {
 -              res = -ENOENT;
 -              goto errout;
 -      }
 -
        if ((cstr.len + sizeof(struct fscrypt_symlink_data) - 1) > max_size) {
                /* Symlink data on the disk is corrupted */
                res = -EIO;
        if (res < 0)
                goto errout;
  
 +      /* this is broken symlink case */
 +      if (unlikely(pstr.name[0] == 0)) {
 +              res = -ENOENT;
 +              goto errout;
 +      }
 +
        paddr = pstr.name;
  
        /* Null-terminate the name */
        paddr[res] = '\0';
  
 -      page_cache_release(cpage);
 +      put_page(cpage);
        set_delayed_call(done, kfree_link, paddr);
        return paddr;
  errout:
        fscrypt_fname_free_buffer(&pstr);
 -      page_cache_release(cpage);
 +      put_page(cpage);
        return ERR_PTR(res);
  }
  
diff --combined fs/hfsplus/xattr.c
index 70e445ff0cff481f40d9fa0783122c6971853cec,45dc4ae3791ad3150684513e507b541e20d5e3e5..4f118d282a7ac1ad5bf1ba171e85229c7c553728
@@@ -220,7 -220,7 +220,7 @@@ check_attr_tree_state_again
  
        index = 0;
        written = 0;
 -      for (; written < node_size; index++, written += PAGE_CACHE_SIZE) {
 +      for (; written < node_size; index++, written += PAGE_SIZE) {
                void *kaddr;
  
                page = read_mapping_page(mapping, index, NULL);
  
                kaddr = kmap_atomic(page);
                memcpy(kaddr, buf + written,
 -                      min_t(size_t, PAGE_CACHE_SIZE, node_size - written));
 +                      min_t(size_t, PAGE_SIZE, node_size - written));
                kunmap_atomic(kaddr);
  
                set_page_dirty(page);
 -              page_cache_release(page);
 +              put_page(page);
        }
  
        hfsplus_mark_inode_dirty(attr_file, HFSPLUS_I_ATTR_DIRTY);
@@@ -579,7 -579,7 +579,7 @@@ failed_getxattr_init
        return res;
  }
  
- ssize_t hfsplus_getxattr(struct dentry *dentry, const char *name,
+ ssize_t hfsplus_getxattr(struct inode *inode, const char *name,
                         void *value, size_t size,
                         const char *prefix, size_t prefixlen)
  {
        strcpy(xattr_name, prefix);
        strcpy(xattr_name + prefixlen, name);
  
-       res = __hfsplus_getxattr(d_inode(dentry), xattr_name, value, size);
+       res = __hfsplus_getxattr(inode, xattr_name, value, size);
        kfree(xattr_name);
        return res;
  
@@@ -844,8 -844,8 +844,8 @@@ end_removexattr
  }
  
  static int hfsplus_osx_getxattr(const struct xattr_handler *handler,
-                               struct dentry *dentry, const char *name,
-                               void *buffer, size_t size)
+                               struct dentry *unused, struct inode *inode,
+                               const char *name, void *buffer, size_t size)
  {
        /*
         * Don't allow retrieving properly prefixed attributes
         * creates), so we pass the name through unmodified (after
         * ensuring it doesn't conflict with another namespace).
         */
-       return __hfsplus_getxattr(d_inode(dentry), name, buffer, size);
+       return __hfsplus_getxattr(inode, name, buffer, size);
  }
  
  static int hfsplus_osx_setxattr(const struct xattr_handler *handler,
diff --combined fs/libfs.c
index f3fa82ce9b700b667ce06421197e4db15ae2f52a,03332f4bdedfaf8a33afdee7eb8ac67249670c6f..43dd28031a1a7a740729f4039e7ee98b3fb71cc1
@@@ -25,7 -25,7 +25,7 @@@ int simple_getattr(struct vfsmount *mnt
  {
        struct inode *inode = d_inode(dentry);
        generic_fillattr(inode, stat);
 -      stat->blocks = inode->i_mapping->nrpages << (PAGE_CACHE_SHIFT - 9);
 +      stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9);
        return 0;
  }
  EXPORT_SYMBOL(simple_getattr);
@@@ -33,7 -33,7 +33,7 @@@
  int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
  {
        buf->f_type = dentry->d_sb->s_magic;
 -      buf->f_bsize = PAGE_CACHE_SIZE;
 +      buf->f_bsize = PAGE_SIZE;
        buf->f_namelen = NAME_MAX;
        return 0;
  }
@@@ -395,7 -395,7 +395,7 @@@ int simple_write_begin(struct file *fil
        struct page *page;
        pgoff_t index;
  
 -      index = pos >> PAGE_CACHE_SHIFT;
 +      index = pos >> PAGE_SHIFT;
  
        page = grab_cache_page_write_begin(mapping, index, flags);
        if (!page)
  
        *pagep = page;
  
 -      if (!PageUptodate(page) && (len != PAGE_CACHE_SIZE)) {
 -              unsigned from = pos & (PAGE_CACHE_SIZE - 1);
 +      if (!PageUptodate(page) && (len != PAGE_SIZE)) {
 +              unsigned from = pos & (PAGE_SIZE - 1);
  
 -              zero_user_segments(page, 0, from, from + len, PAGE_CACHE_SIZE);
 +              zero_user_segments(page, 0, from, from + len, PAGE_SIZE);
        }
        return 0;
  }
@@@ -442,7 -442,7 +442,7 @@@ int simple_write_end(struct file *file
  
        /* zero the stale part of the page if we did a short copy */
        if (copied < len) {
 -              unsigned from = pos & (PAGE_CACHE_SIZE - 1);
 +              unsigned from = pos & (PAGE_SIZE - 1);
  
                zero_user(page, from + copied, len - copied);
        }
  
        set_page_dirty(page);
        unlock_page(page);
 -      page_cache_release(page);
 +      put_page(page);
  
        return copied;
  }
@@@ -477,8 -477,8 +477,8 @@@ int simple_fill_super(struct super_bloc
        struct dentry *dentry;
        int i;
  
 -      s->s_blocksize = PAGE_CACHE_SIZE;
 -      s->s_blocksize_bits = PAGE_CACHE_SHIFT;
 +      s->s_blocksize = PAGE_SIZE;
 +      s->s_blocksize_bits = PAGE_SHIFT;
        s->s_magic = magic;
        s->s_op = &simple_super_operations;
        s->s_time_gran = 1;
@@@ -994,12 -994,12 +994,12 @@@ int generic_check_addressable(unsigned 
  {
        u64 last_fs_block = num_blocks - 1;
        u64 last_fs_page =
 -              last_fs_block >> (PAGE_CACHE_SHIFT - blocksize_bits);
 +              last_fs_block >> (PAGE_SHIFT - blocksize_bits);
  
        if (unlikely(num_blocks == 0))
                return 0;
  
 -      if ((blocksize_bits < 9) || (blocksize_bits > PAGE_CACHE_SHIFT))
 +      if ((blocksize_bits < 9) || (blocksize_bits > PAGE_SHIFT))
                return -EINVAL;
  
        if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) ||
@@@ -1127,8 -1127,8 +1127,8 @@@ static int empty_dir_setxattr(struct de
        return -EOPNOTSUPP;
  }
  
- static ssize_t empty_dir_getxattr(struct dentry *dentry, const char *name,
-                                 void *value, size_t size)
+ static ssize_t empty_dir_getxattr(struct dentry *dentry, struct inode *inode,
+                                 const char *name, void *value, size_t size)
  {
        return -EOPNOTSUPP;
  }
diff --combined fs/namei.c
index 1d9ca2d5dff68ee184bf5dbe6d0d417f1b63f245,c0d551fc43a0fba8049755e446aec601151cf387..bdcea8a018b889cc80594517fa4cd9385e7c2251
@@@ -265,7 -265,7 +265,7 @@@ static int check_acl(struct inode *inod
                if (!acl)
                        return -EAGAIN;
                /* no ->get_acl() calls in RCU mode... */
-               if (acl == ACL_NOT_CACHED)
+               if (is_uncached_acl(acl))
                        return -ECHILD;
                return posix_acl_permission(inode, acl, mask & ~MAY_NOT_BLOCK);
        }
@@@ -1740,17 -1740,15 +1740,17 @@@ static int walk_component(struct nameid
                                          nd->flags);
                if (IS_ERR(path.dentry))
                        return PTR_ERR(path.dentry);
 -              if (unlikely(d_is_negative(path.dentry))) {
 -                      dput(path.dentry);
 -                      return -ENOENT;
 -              }
 +
                path.mnt = nd->path.mnt;
                err = follow_managed(&path, nd);
                if (unlikely(err < 0))
                        return err;
  
 +              if (unlikely(d_is_negative(path.dentry))) {
 +                      path_to_nameidata(&path, nd);
 +                      return -ENOENT;
 +              }
 +
                seq = 0;        /* we are already out of RCU mode */
                inode = d_backing_inode(path.dentry);
        }
@@@ -2655,7 -2653,7 +2655,7 @@@ struct dentry *lock_rename(struct dentr
                return NULL;
        }
  
-       mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
+       mutex_lock(&p1->d_sb->s_vfs_rename_mutex);
  
        p = d_ancestor(p2, p1);
        if (p) {
@@@ -2682,7 -2680,7 +2682,7 @@@ void unlock_rename(struct dentry *p1, s
        inode_unlock(p1->d_inode);
        if (p1 != p2) {
                inode_unlock(p2->d_inode);
-               mutex_unlock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
+               mutex_unlock(&p1->d_sb->s_vfs_rename_mutex);
        }
  }
  EXPORT_SYMBOL(unlock_rename);
diff --combined fs/nfs/direct.c
index c93826e4a8c6be0df99295da39a6655a77336600,e5daa932b82384729792c37196142a88891e633e..438d4e70742f0825b3dabdf2247bdf20beb13b06
@@@ -269,7 -269,7 +269,7 @@@ static void nfs_direct_release_pages(st
  {
        unsigned int i;
        for (i = 0; i < npages; i++)
 -              page_cache_release(pages[i]);
 +              put_page(pages[i]);
  }
  
  void nfs_init_cinfo_from_dreq(struct nfs_commit_info *cinfo,
@@@ -396,7 -396,7 +396,7 @@@ static void nfs_direct_complete(struct 
  static void nfs_direct_readpage_release(struct nfs_page *req)
  {
        dprintk("NFS: direct read done (%s/%llu %d@%lld)\n",
-               d_inode(req->wb_context->dentry)->i_sb->s_id,
+               req->wb_context->dentry->d_sb->s_id,
                (unsigned long long)NFS_FILEID(d_inode(req->wb_context->dentry)),
                req->wb_bytes,
                (long long)req_offset(req));
@@@ -1003,7 -1003,7 +1003,7 @@@ ssize_t nfs_file_direct_write(struct ki
                      iov_iter_count(iter));
  
        pos = iocb->ki_pos;
 -      end = (pos + iov_iter_count(iter) - 1) >> PAGE_CACHE_SHIFT;
 +      end = (pos + iov_iter_count(iter) - 1) >> PAGE_SHIFT;
  
        inode_lock(inode);
  
  
        if (mapping->nrpages) {
                result = invalidate_inode_pages2_range(mapping,
 -                                      pos >> PAGE_CACHE_SHIFT, end);
 +                                      pos >> PAGE_SHIFT, end);
                if (result)
                        goto out_unlock;
        }
  
        if (mapping->nrpages) {
                invalidate_inode_pages2_range(mapping,
 -                                            pos >> PAGE_CACHE_SHIFT, end);
 +                                            pos >> PAGE_SHIFT, end);
        }
  
        inode_unlock(inode);
diff --combined fs/nilfs2/namei.c
index 151bc19d47c0e189525b283e7d154fe70e56c3c3,38d67f3e25bc838468a56ba4b8488d3c4bb47bda..3b2af05f9fb4c9e8924264da3a14e8c341c08b33
@@@ -431,11 -431,11 +431,11 @@@ static int nilfs_rename(struct inode *o
  out_dir:
        if (dir_de) {
                kunmap(dir_page);
 -              page_cache_release(dir_page);
 +              put_page(dir_page);
        }
  out_old:
        kunmap(old_page);
 -      page_cache_release(old_page);
 +      put_page(old_page);
  out:
        nilfs_transaction_abort(old_dir->i_sb);
        return err;
@@@ -457,7 -457,7 +457,7 @@@ static struct dentry *nilfs_get_parent(
  
        root = NILFS_I(d_inode(child))->i_root;
  
-       inode = nilfs_iget(d_inode(child)->i_sb, root, ino);
+       inode = nilfs_iget(child->d_sb, root, ino);
        if (IS_ERR(inode))
                return ERR_CAST(inode);
  
diff --combined fs/ocfs2/file.c
index 5308841756be24f6e682e361a35f1f7db00f9568,c6fdcbd46bba428e4a3b486308e28c1b87c8a1e4..2bf23fd333edfa38fc1d43d6af0b0d9806e750e8
@@@ -770,14 -770,14 +770,14 @@@ static int ocfs2_write_zero_page(struc
  {
        struct address_space *mapping = inode->i_mapping;
        struct page *page;
 -      unsigned long index = abs_from >> PAGE_CACHE_SHIFT;
 +      unsigned long index = abs_from >> PAGE_SHIFT;
        handle_t *handle;
        int ret = 0;
        unsigned zero_from, zero_to, block_start, block_end;
        struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
  
        BUG_ON(abs_from >= abs_to);
 -      BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT));
 +      BUG_ON(abs_to > (((u64)index + 1) << PAGE_SHIFT));
        BUG_ON(abs_from & (inode->i_blkbits - 1));
  
        handle = ocfs2_zero_start_ordered_transaction(inode, di_bh);
        }
  
        /* Get the offsets within the page that we want to zero */
 -      zero_from = abs_from & (PAGE_CACHE_SIZE - 1);
 -      zero_to = abs_to & (PAGE_CACHE_SIZE - 1);
 +      zero_from = abs_from & (PAGE_SIZE - 1);
 +      zero_to = abs_to & (PAGE_SIZE - 1);
        if (!zero_to)
 -              zero_to = PAGE_CACHE_SIZE;
 +              zero_to = PAGE_SIZE;
  
        trace_ocfs2_write_zero_page(
                        (unsigned long long)OCFS2_I(inode)->ip_blkno,
  
  out_unlock:
        unlock_page(page);
 -      page_cache_release(page);
 +      put_page(page);
  out_commit_trans:
        if (handle)
                ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
@@@ -959,7 -959,7 +959,7 @@@ static int ocfs2_zero_extend_range(stru
        BUG_ON(range_start >= range_end);
  
        while (zero_pos < range_end) {
 -              next_pos = (zero_pos & PAGE_CACHE_MASK) + PAGE_CACHE_SIZE;
 +              next_pos = (zero_pos & PAGE_MASK) + PAGE_SIZE;
                if (next_pos > range_end)
                        next_pos = range_end;
                rc = ocfs2_write_zero_page(inode, zero_pos, next_pos, di_bh);
@@@ -1290,7 -1290,7 +1290,7 @@@ int ocfs2_getattr(struct vfsmount *mnt
                  struct kstat *stat)
  {
        struct inode *inode = d_inode(dentry);
-       struct super_block *sb = d_inode(dentry)->i_sb;
+       struct super_block *sb = dentry->d_sb;
        struct ocfs2_super *osb = sb->s_fs_info;
        int err;
  
diff --combined fs/orangefs/xattr.c
index 63a6280d8c3a415df407ce96bd4833a99538fde0,6a4c0f7ce5c16b316133526d8c25ec629cc55aa7..99c19545752c23316c08ec6cafc6753c53f6cc27
@@@ -73,6 -73,10 +73,6 @@@ ssize_t orangefs_inode_getxattr(struct 
                     "%s: prefix %s name %s, buffer_size %zd\n",
                     __func__, prefix, name, size);
  
 -      if (name == NULL || (size > 0 && buffer == NULL)) {
 -              gossip_err("orangefs_inode_getxattr: bogus NULL pointers\n");
 -              return -EINVAL;
 -      }
        if ((strlen(name) + strlen(prefix)) >= ORANGEFS_MAX_XATTR_NAMELEN) {
                gossip_err("Invalid key length (%d)\n",
                           (int)(strlen(name) + strlen(prefix)));
                goto out_release_op;
        }
  
 -      memset(buffer, 0, size);
        memcpy(buffer, new_op->downcall.resp.getxattr.val, length);
 +      memset(buffer + length, 0, size - length);
        gossip_debug(GOSSIP_XATTR_DEBUG,
             "orangefs_inode_getxattr: inode %pU "
             "key %s key_sz %d, val_len %d\n",
@@@ -235,7 -239,8 +235,7 @@@ int orangefs_inode_setxattr(struct inod
                     "%s: prefix %s, name %s, buffer_size %zd\n",
                     __func__, prefix, name, size);
  
 -      if (size < 0 ||
 -          size >= ORANGEFS_MAX_XATTR_VALUELEN ||
 +      if (size >= ORANGEFS_MAX_XATTR_VALUELEN ||
            flags < 0) {
                gossip_err("orangefs_inode_setxattr: bogus values of size(%d), flags(%d)\n",
                           (int)size,
                return -EINVAL;
        }
  
 -      if (name == NULL ||
 -          (size > 0 && value == NULL)) {
 -              gossip_err("orangefs_inode_setxattr: bogus NULL pointers!\n");
 -              return -EINVAL;
 -      }
 -
        internal_flag = convert_to_internal_xattr_flags(flags);
  
        if (prefix) {
@@@ -342,6 -353,10 +342,6 @@@ ssize_t orangefs_listxattr(struct dentr
                gossip_err("%s: bogus NULL pointers\n", __func__);
                return -EINVAL;
        }
 -      if (size < 0) {
 -              gossip_err("Invalid size (%d)\n", (int)size);
 -              return -EINVAL;
 -      }
  
        down_read(&orangefs_inode->xattr_sem);
        new_op = op_alloc(ORANGEFS_VFS_OP_LISTXATTR);
@@@ -463,12 -478,13 +463,13 @@@ static int orangefs_xattr_set_default(c
  }
  
  static int orangefs_xattr_get_default(const struct xattr_handler *handler,
-                                     struct dentry *dentry,
+                                     struct dentry *unused,
+                                     struct inode *inode,
                                      const char *name,
                                      void *buffer,
                                      size_t size)
  {
-       return orangefs_inode_getxattr(dentry->d_inode,
+       return orangefs_inode_getxattr(inode,
                                    ORANGEFS_XATTR_NAME_DEFAULT_PREFIX,
                                    name,
                                    buffer,
@@@ -492,12 -508,13 +493,13 @@@ static int orangefs_xattr_set_trusted(c
  }
  
  static int orangefs_xattr_get_trusted(const struct xattr_handler *handler,
-                                     struct dentry *dentry,
+                                     struct dentry *unused,
+                                     struct inode *inode,
                                      const char *name,
                                      void *buffer,
                                      size_t size)
  {
-       return orangefs_inode_getxattr(dentry->d_inode,
+       return orangefs_inode_getxattr(inode,
                                    ORANGEFS_XATTR_NAME_TRUSTED_PREFIX,
                                    name,
                                    buffer,
diff --combined fs/overlayfs/super.c
index 5d972e6cd3fe97fcae5c782b59c72c0007668566,14cab381ceceaa09ba1b565670909a8e46f281c6..29c4d32507256ff3faba6774b51f973155a2f6d5
@@@ -274,7 -274,7 +274,7 @@@ static bool ovl_is_opaquedir(struct den
        if (!S_ISDIR(inode->i_mode) || !inode->i_op->getxattr)
                return false;
  
-       res = inode->i_op->getxattr(dentry, OVL_XATTR_OPAQUE, &val, 1);
+       res = inode->i_op->getxattr(dentry, inode, OVL_XATTR_OPAQUE, &val, 1);
        if (res == 1 && val == 'y')
                return true;
  
@@@ -295,37 -295,6 +295,37 @@@ static void ovl_dentry_release(struct d
        }
  }
  
 +static struct dentry *ovl_d_real(struct dentry *dentry, struct inode *inode)
 +{
 +      struct dentry *real;
 +
 +      if (d_is_dir(dentry)) {
 +              if (!inode || inode == d_inode(dentry))
 +                      return dentry;
 +              goto bug;
 +      }
 +
 +      real = ovl_dentry_upper(dentry);
 +      if (real && (!inode || inode == d_inode(real)))
 +              return real;
 +
 +      real = ovl_dentry_lower(dentry);
 +      if (!real)
 +              goto bug;
 +
 +      if (!inode || inode == d_inode(real))
 +              return real;
 +
 +      /* Handle recursion */
 +      if (real->d_flags & DCACHE_OP_REAL)
 +              return real->d_op->d_real(real, inode);
 +
 +bug:
 +      WARN(1, "ovl_d_real(%pd4, %s:%lu\n): real dentry not found\n", dentry,
 +           inode ? inode->i_sb->s_id : "NULL", inode ? inode->i_ino : 0);
 +      return dentry;
 +}
 +
  static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
  {
        struct ovl_entry *oe = dentry->d_fsdata;
@@@ -370,13 -339,11 +370,13 @@@ static int ovl_dentry_weak_revalidate(s
  static const struct dentry_operations ovl_dentry_operations = {
        .d_release = ovl_dentry_release,
        .d_select_inode = ovl_d_select_inode,
 +      .d_real = ovl_d_real,
  };
  
  static const struct dentry_operations ovl_reval_dentry_operations = {
        .d_release = ovl_dentry_release,
        .d_select_inode = ovl_d_select_inode,
 +      .d_real = ovl_d_real,
        .d_revalidate = ovl_dentry_revalidate,
        .d_weak_revalidate = ovl_dentry_weak_revalidate,
  };
diff --combined fs/reiserfs/file.c
index 389773711de4cf0aafc2a4002c484b8bbd7eb984,9ffaf7145644aad6d29fc3de48d92d8eb9ce2ea3..90f815bdfa8a1159cc8fccc849b8e73124d26a57
@@@ -180,11 -180,11 +180,11 @@@ int reiserfs_commit_page(struct inode *
        int partial = 0;
        unsigned blocksize;
        struct buffer_head *bh, *head;
 -      unsigned long i_size_index = inode->i_size >> PAGE_CACHE_SHIFT;
 +      unsigned long i_size_index = inode->i_size >> PAGE_SHIFT;
        int new;
        int logit = reiserfs_file_data_log(inode);
        struct super_block *s = inode->i_sb;
 -      int bh_per_page = PAGE_CACHE_SIZE / s->s_blocksize;
 +      int bh_per_page = PAGE_SIZE / s->s_blocksize;
        struct reiserfs_transaction_handle th;
        int ret = 0;
  
@@@ -260,10 -260,10 +260,10 @@@ const struct file_operations reiserfs_f
  
  const struct inode_operations reiserfs_file_inode_operations = {
        .setattr = reiserfs_setattr,
-       .setxattr = reiserfs_setxattr,
-       .getxattr = reiserfs_getxattr,
+       .setxattr = generic_setxattr,
+       .getxattr = generic_getxattr,
        .listxattr = reiserfs_listxattr,
-       .removexattr = reiserfs_removexattr,
+       .removexattr = generic_removexattr,
        .permission = reiserfs_permission,
        .get_acl = reiserfs_get_acl,
        .set_acl = reiserfs_set_acl,
diff --combined fs/reiserfs/xattr.c
index 28f5f8b113700e63e9529bba67008ffcb469a724,02137bbda0ece62ad045d4ffecbc911082cde6ce..a33812ae9fad2e176222da0b14c0f86a65180cf8
@@@ -415,7 -415,7 +415,7 @@@ out
  static inline void reiserfs_put_page(struct page *page)
  {
        kunmap(page);
 -      page_cache_release(page);
 +      put_page(page);
  }
  
  static struct page *reiserfs_get_page(struct inode *dir, size_t n)
         * and an unlink/rmdir has just occurred - GFP_NOFS avoids this
         */
        mapping_set_gfp_mask(mapping, GFP_NOFS);
 -      page = read_mapping_page(mapping, n >> PAGE_CACHE_SHIFT, NULL);
 +      page = read_mapping_page(mapping, n >> PAGE_SHIFT, NULL);
        if (!IS_ERR(page)) {
                kmap(page);
                if (PageError(page))
@@@ -526,10 -526,10 +526,10 @@@ reiserfs_xattr_set_handle(struct reiser
        while (buffer_pos < buffer_size || buffer_pos == 0) {
                size_t chunk;
                size_t skip = 0;
 -              size_t page_offset = (file_pos & (PAGE_CACHE_SIZE - 1));
 +              size_t page_offset = (file_pos & (PAGE_SIZE - 1));
  
 -              if (buffer_size - buffer_pos > PAGE_CACHE_SIZE)
 -                      chunk = PAGE_CACHE_SIZE;
 +              if (buffer_size - buffer_pos > PAGE_SIZE)
 +                      chunk = PAGE_SIZE;
                else
                        chunk = buffer_size - buffer_pos;
  
                        struct reiserfs_xattr_header *rxh;
  
                        skip = file_pos = sizeof(struct reiserfs_xattr_header);
 -                      if (chunk + skip > PAGE_CACHE_SIZE)
 -                              chunk = PAGE_CACHE_SIZE - skip;
 +                      if (chunk + skip > PAGE_SIZE)
 +                              chunk = PAGE_SIZE - skip;
                        rxh = (struct reiserfs_xattr_header *)data;
                        rxh->h_magic = cpu_to_le32(REISERFS_XATTR_MAGIC);
                        rxh->h_hash = cpu_to_le32(xahash);
@@@ -675,8 -675,8 +675,8 @@@ reiserfs_xattr_get(struct inode *inode
                char *data;
                size_t skip = 0;
  
 -              if (isize - file_pos > PAGE_CACHE_SIZE)
 -                      chunk = PAGE_CACHE_SIZE;
 +              if (isize - file_pos > PAGE_SIZE)
 +                      chunk = PAGE_SIZE;
                else
                        chunk = isize - file_pos;
  
@@@ -764,60 -764,6 +764,6 @@@ find_xattr_handler_prefix(const struct 
        return xah;
  }
  
- /*
-  * Inode operation getxattr()
-  */
- ssize_t
- reiserfs_getxattr(struct dentry * dentry, const char *name, void *buffer,
-                 size_t size)
- {
-       const struct xattr_handler *handler;
-       handler = find_xattr_handler_prefix(dentry->d_sb->s_xattr, name);
-       if (!handler || get_inode_sd_version(d_inode(dentry)) == STAT_DATA_V1)
-               return -EOPNOTSUPP;
-       return handler->get(handler, dentry, name, buffer, size);
- }
- /*
-  * Inode operation setxattr()
-  *
-  * d_inode(dentry)->i_mutex down
-  */
- int
- reiserfs_setxattr(struct dentry *dentry, const char *name, const void *value,
-                 size_t size, int flags)
- {
-       const struct xattr_handler *handler;
-       handler = find_xattr_handler_prefix(dentry->d_sb->s_xattr, name);
-       if (!handler || get_inode_sd_version(d_inode(dentry)) == STAT_DATA_V1)
-               return -EOPNOTSUPP;
-       return handler->set(handler, dentry, name, value, size, flags);
- }
- /*
-  * Inode operation removexattr()
-  *
-  * d_inode(dentry)->i_mutex down
-  */
- int reiserfs_removexattr(struct dentry *dentry, const char *name)
- {
-       const struct xattr_handler *handler;
-       handler = find_xattr_handler_prefix(dentry->d_sb->s_xattr, name);
-       if (!handler || get_inode_sd_version(d_inode(dentry)) == STAT_DATA_V1)
-               return -EOPNOTSUPP;
-       return handler->set(handler, dentry, name, NULL, 0, XATTR_REPLACE);
- }
  struct listxattr_buf {
        struct dir_context ctx;
        size_t size;
diff --combined fs/ubifs/ubifs.h
index 4cd7e569cd00d3dcc07ef6c3de38f9c5987d149f,536fb495f2f195b5a602fac38712e7da9ce2e29f..12e79e60c1769f535813334cee4699179fb990ea
@@@ -46,8 -46,8 +46,8 @@@
  #define UBIFS_SUPER_MAGIC 0x24051905
  
  /* Number of UBIFS blocks per VFS page */
 -#define UBIFS_BLOCKS_PER_PAGE (PAGE_CACHE_SIZE / UBIFS_BLOCK_SIZE)
 -#define UBIFS_BLOCKS_PER_PAGE_SHIFT (PAGE_CACHE_SHIFT - UBIFS_BLOCK_SHIFT)
 +#define UBIFS_BLOCKS_PER_PAGE (PAGE_SIZE / UBIFS_BLOCK_SIZE)
 +#define UBIFS_BLOCKS_PER_PAGE_SHIFT (PAGE_SHIFT - UBIFS_BLOCK_SHIFT)
  
  /* "File system end of life" sequence number watermark */
  #define SQNUM_WARN_WATERMARK 0xFFFFFFFF00000000ULL
@@@ -1734,8 -1734,8 +1734,8 @@@ int ubifs_getattr(struct vfsmount *mnt
  /* xattr.c */
  int ubifs_setxattr(struct dentry *dentry, const char *name,
                   const void *value, size_t size, int flags);
- ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf,
-                      size_t size);
+ ssize_t ubifs_getxattr(struct dentry *dentry, struct inode *host,
+                      const char *name, void *buf, size_t size);
  ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size);
  int ubifs_removexattr(struct dentry *dentry, const char *name);
  int ubifs_init_security(struct inode *dentry, struct inode *inode,
diff --combined include/linux/fs.h
index 70e61b58baaf662d15f4ca67f355b5dcf8d52438,1b5fcaeea827238050a9d5a235fc1b74658e7b1f..6d0fa9174a24b0609fd20032dc3973e3bccfc154
@@@ -577,6 -577,18 +577,18 @@@ static inline void mapping_allow_writab
  struct posix_acl;
  #define ACL_NOT_CACHED ((void *)(-1))
  
+ static inline struct posix_acl *
+ uncached_acl_sentinel(struct task_struct *task)
+ {
+       return (void *)task + 1;
+ }
+ static inline bool
+ is_uncached_acl(struct posix_acl *acl)
+ {
+       return (long)acl & 1;
+ }
  #define IOP_FASTPERM  0x0001
  #define IOP_LOOKUP    0x0002
  #define IOP_NOFOLLOW  0x0004
@@@ -929,7 -941,7 +941,7 @@@ static inline struct file *get_file(str
  /* Page cache limit. The filesystems should put that into their s_maxbytes 
     limits, otherwise bad things can happen in VM. */ 
  #if BITS_PER_LONG==32
 -#define MAX_LFS_FILESIZE      (((loff_t)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1) 
 +#define MAX_LFS_FILESIZE      (((loff_t)PAGE_SIZE << (BITS_PER_LONG-1))-1)
  #elif BITS_PER_LONG==64
  #define MAX_LFS_FILESIZE      ((loff_t)0x7fffffffffffffffLL)
  #endif
@@@ -1241,16 -1253,6 +1253,16 @@@ static inline struct inode *file_inode(
        return f->f_inode;
  }
  
 +static inline struct dentry *file_dentry(const struct file *file)
 +{
 +      struct dentry *dentry = file->f_path.dentry;
 +
 +      if (unlikely(dentry->d_flags & DCACHE_OP_REAL))
 +              return dentry->d_op->d_real(dentry, file_inode(file));
 +      else
 +              return dentry;
 +}
 +
  static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
  {
        return locks_lock_inode_wait(file_inode(filp), fl);
@@@ -1700,7 -1702,8 +1712,8 @@@ struct inode_operations 
        int (*setattr) (struct dentry *, struct iattr *);
        int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
        int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
-       ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
+       ssize_t (*getxattr) (struct dentry *, struct inode *,
+                            const char *, void *, size_t);
        ssize_t (*listxattr) (struct dentry *, char *, size_t);
        int (*removexattr) (struct dentry *, const char *);
        int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
@@@ -2077,7 -2080,7 +2090,7 @@@ extern int generic_update_time(struct i
  /* /sys/fs */
  extern struct kobject *fs_kobj;
  
 -#define MAX_RW_COUNT (INT_MAX & PAGE_CACHE_MASK)
 +#define MAX_RW_COUNT (INT_MAX & PAGE_MASK)
  
  #ifdef CONFIG_MANDATORY_FILE_LOCKING
  extern int locks_mandatory_locked(struct file *);
diff --combined mm/shmem.c
index 719bd6b88d98eaf0958ec57ddb152f22de0f74d0,00d5d025eece0cae829b1470db660333eb99a639..4640699b209bf7239809bc43063777c021348f1b
@@@ -75,8 -75,8 +75,8 @@@ static struct vfsmount *shm_mnt
  
  #include "internal.h"
  
 -#define BLOCKS_PER_PAGE  (PAGE_CACHE_SIZE/512)
 -#define VM_ACCT(size)    (PAGE_CACHE_ALIGN(size) >> PAGE_SHIFT)
 +#define BLOCKS_PER_PAGE  (PAGE_SIZE/512)
 +#define VM_ACCT(size)    (PAGE_ALIGN(size) >> PAGE_SHIFT)
  
  /* Pretend that each entry is of this size in directory's i_size */
  #define BOGO_DIRENT_SIZE 20
@@@ -176,13 -176,13 +176,13 @@@ static inline int shmem_reacct_size(uns
  static inline int shmem_acct_block(unsigned long flags)
  {
        return (flags & VM_NORESERVE) ?
 -              security_vm_enough_memory_mm(current->mm, VM_ACCT(PAGE_CACHE_SIZE)) : 0;
 +              security_vm_enough_memory_mm(current->mm, VM_ACCT(PAGE_SIZE)) : 0;
  }
  
  static inline void shmem_unacct_blocks(unsigned long flags, long pages)
  {
        if (flags & VM_NORESERVE)
 -              vm_unacct_memory(pages * VM_ACCT(PAGE_CACHE_SIZE));
 +              vm_unacct_memory(pages * VM_ACCT(PAGE_SIZE));
  }
  
  static const struct super_operations shmem_ops;
@@@ -300,7 -300,7 +300,7 @@@ static int shmem_add_to_page_cache(stru
        VM_BUG_ON_PAGE(!PageLocked(page), page);
        VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
  
 -      page_cache_get(page);
 +      get_page(page);
        page->mapping = mapping;
        page->index = index;
  
        } else {
                page->mapping = NULL;
                spin_unlock_irq(&mapping->tree_lock);
 -              page_cache_release(page);
 +              put_page(page);
        }
        return error;
  }
@@@ -338,7 -338,7 +338,7 @@@ static void shmem_delete_from_page_cach
        __dec_zone_page_state(page, NR_FILE_PAGES);
        __dec_zone_page_state(page, NR_SHMEM);
        spin_unlock_irq(&mapping->tree_lock);
 -      page_cache_release(page);
 +      put_page(page);
        BUG_ON(error);
  }
  
@@@ -474,10 -474,10 +474,10 @@@ static void shmem_undo_range(struct ino
  {
        struct address_space *mapping = inode->i_mapping;
        struct shmem_inode_info *info = SHMEM_I(inode);
 -      pgoff_t start = (lstart + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 -      pgoff_t end = (lend + 1) >> PAGE_CACHE_SHIFT;
 -      unsigned int partial_start = lstart & (PAGE_CACHE_SIZE - 1);
 -      unsigned int partial_end = (lend + 1) & (PAGE_CACHE_SIZE - 1);
 +      pgoff_t start = (lstart + PAGE_SIZE - 1) >> PAGE_SHIFT;
 +      pgoff_t end = (lend + 1) >> PAGE_SHIFT;
 +      unsigned int partial_start = lstart & (PAGE_SIZE - 1);
 +      unsigned int partial_end = (lend + 1) & (PAGE_SIZE - 1);
        struct pagevec pvec;
        pgoff_t indices[PAGEVEC_SIZE];
        long nr_swaps_freed = 0;
                struct page *page = NULL;
                shmem_getpage(inode, start - 1, &page, SGP_READ, NULL);
                if (page) {
 -                      unsigned int top = PAGE_CACHE_SIZE;
 +                      unsigned int top = PAGE_SIZE;
                        if (start > end) {
                                top = partial_end;
                                partial_end = 0;
                        zero_user_segment(page, partial_start, top);
                        set_page_dirty(page);
                        unlock_page(page);
 -                      page_cache_release(page);
 +                      put_page(page);
                }
        }
        if (partial_end) {
                        zero_user_segment(page, 0, partial_end);
                        set_page_dirty(page);
                        unlock_page(page);
 -                      page_cache_release(page);
 +                      put_page(page);
                }
        }
        if (start >= end)
@@@ -833,7 -833,7 +833,7 @@@ int shmem_unuse(swp_entry_t swap, struc
                mem_cgroup_commit_charge(page, memcg, true, false);
  out:
        unlock_page(page);
 -      page_cache_release(page);
 +      put_page(page);
        return error;
  }
  
@@@ -1080,7 -1080,7 +1080,7 @@@ static int shmem_replace_page(struct pa
        if (!newpage)
                return -ENOMEM;
  
 -      page_cache_get(newpage);
 +      get_page(newpage);
        copy_highpage(newpage, oldpage);
        flush_dcache_page(newpage);
  
        set_page_private(oldpage, 0);
  
        unlock_page(oldpage);
 -      page_cache_release(oldpage);
 -      page_cache_release(oldpage);
 +      put_page(oldpage);
 +      put_page(oldpage);
        return error;
  }
  
@@@ -1145,7 -1145,7 +1145,7 @@@ static int shmem_getpage_gfp(struct ino
        int once = 0;
        int alloced = 0;
  
 -      if (index > (MAX_LFS_FILESIZE >> PAGE_CACHE_SHIFT))
 +      if (index > (MAX_LFS_FILESIZE >> PAGE_SHIFT))
                return -EFBIG;
  repeat:
        swap.val = 0;
        }
  
        if (sgp != SGP_WRITE && sgp != SGP_FALLOC &&
 -          ((loff_t)index << PAGE_CACHE_SHIFT) >= i_size_read(inode)) {
 +          ((loff_t)index << PAGE_SHIFT) >= i_size_read(inode)) {
                error = -EINVAL;
                goto unlock;
        }
                if (sgp != SGP_READ)
                        goto clear;
                unlock_page(page);
 -              page_cache_release(page);
 +              put_page(page);
                page = NULL;
        }
        if (page || (sgp == SGP_READ && !swap.val)) {
@@@ -1327,7 -1327,7 +1327,7 @@@ clear
  
        /* Perhaps the file has been truncated since we checked */
        if (sgp != SGP_WRITE && sgp != SGP_FALLOC &&
 -          ((loff_t)index << PAGE_CACHE_SHIFT) >= i_size_read(inode)) {
 +          ((loff_t)index << PAGE_SHIFT) >= i_size_read(inode)) {
                if (alloced) {
                        ClearPageDirty(page);
                        delete_from_page_cache(page);
@@@ -1355,7 -1355,7 +1355,7 @@@ failed
  unlock:
        if (page) {
                unlock_page(page);
 -              page_cache_release(page);
 +              put_page(page);
        }
        if (error == -ENOSPC && !once++) {
                info = SHMEM_I(inode);
@@@ -1577,7 -1577,7 +1577,7 @@@ shmem_write_begin(struct file *file, st
  {
        struct inode *inode = mapping->host;
        struct shmem_inode_info *info = SHMEM_I(inode);
 -      pgoff_t index = pos >> PAGE_CACHE_SHIFT;
 +      pgoff_t index = pos >> PAGE_SHIFT;
  
        /* i_mutex is held by caller */
        if (unlikely(info->seals)) {
@@@ -1601,16 -1601,16 +1601,16 @@@ shmem_write_end(struct file *file, stru
                i_size_write(inode, pos + copied);
  
        if (!PageUptodate(page)) {
 -              if (copied < PAGE_CACHE_SIZE) {
 -                      unsigned from = pos & (PAGE_CACHE_SIZE - 1);
 +              if (copied < PAGE_SIZE) {
 +                      unsigned from = pos & (PAGE_SIZE - 1);
                        zero_user_segments(page, 0, from,
 -                                      from + copied, PAGE_CACHE_SIZE);
 +                                      from + copied, PAGE_SIZE);
                }
                SetPageUptodate(page);
        }
        set_page_dirty(page);
        unlock_page(page);
 -      page_cache_release(page);
 +      put_page(page);
  
        return copied;
  }
@@@ -1635,8 -1635,8 +1635,8 @@@ static ssize_t shmem_file_read_iter(str
        if (!iter_is_iovec(to))
                sgp = SGP_DIRTY;
  
 -      index = *ppos >> PAGE_CACHE_SHIFT;
 -      offset = *ppos & ~PAGE_CACHE_MASK;
 +      index = *ppos >> PAGE_SHIFT;
 +      offset = *ppos & ~PAGE_MASK;
  
        for (;;) {
                struct page *page = NULL;
                unsigned long nr, ret;
                loff_t i_size = i_size_read(inode);
  
 -              end_index = i_size >> PAGE_CACHE_SHIFT;
 +              end_index = i_size >> PAGE_SHIFT;
                if (index > end_index)
                        break;
                if (index == end_index) {
 -                      nr = i_size & ~PAGE_CACHE_MASK;
 +                      nr = i_size & ~PAGE_MASK;
                        if (nr <= offset)
                                break;
                }
                 * We must evaluate after, since reads (unlike writes)
                 * are called without i_mutex protection against truncate
                 */
 -              nr = PAGE_CACHE_SIZE;
 +              nr = PAGE_SIZE;
                i_size = i_size_read(inode);
 -              end_index = i_size >> PAGE_CACHE_SHIFT;
 +              end_index = i_size >> PAGE_SHIFT;
                if (index == end_index) {
 -                      nr = i_size & ~PAGE_CACHE_MASK;
 +                      nr = i_size & ~PAGE_MASK;
                        if (nr <= offset) {
                                if (page)
 -                                      page_cache_release(page);
 +                                      put_page(page);
                                break;
                        }
                }
                                mark_page_accessed(page);
                } else {
                        page = ZERO_PAGE(0);
 -                      page_cache_get(page);
 +                      get_page(page);
                }
  
                /*
                ret = copy_page_to_iter(page, offset, nr, to);
                retval += ret;
                offset += ret;
 -              index += offset >> PAGE_CACHE_SHIFT;
 -              offset &= ~PAGE_CACHE_MASK;
 +              index += offset >> PAGE_SHIFT;
 +              offset &= ~PAGE_MASK;
  
 -              page_cache_release(page);
 +              put_page(page);
                if (!iov_iter_count(to))
                        break;
                if (ret < nr) {
                cond_resched();
        }
  
 -      *ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;
 +      *ppos = ((loff_t) index << PAGE_SHIFT) + offset;
        file_accessed(file);
        return retval ? retval : error;
  }
@@@ -1755,9 -1755,9 +1755,9 @@@ static ssize_t shmem_file_splice_read(s
        if (splice_grow_spd(pipe, &spd))
                return -ENOMEM;
  
 -      index = *ppos >> PAGE_CACHE_SHIFT;
 -      loff = *ppos & ~PAGE_CACHE_MASK;
 -      req_pages = (len + loff + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 +      index = *ppos >> PAGE_SHIFT;
 +      loff = *ppos & ~PAGE_MASK;
 +      req_pages = (len + loff + PAGE_SIZE - 1) >> PAGE_SHIFT;
        nr_pages = min(req_pages, spd.nr_pages_max);
  
        spd.nr_pages = find_get_pages_contig(mapping, index,
                index++;
        }
  
 -      index = *ppos >> PAGE_CACHE_SHIFT;
 +      index = *ppos >> PAGE_SHIFT;
        nr_pages = spd.nr_pages;
        spd.nr_pages = 0;
  
                if (!len)
                        break;
  
 -              this_len = min_t(unsigned long, len, PAGE_CACHE_SIZE - loff);
 +              this_len = min_t(unsigned long, len, PAGE_SIZE - loff);
                page = spd.pages[page_nr];
  
                if (!PageUptodate(page) || page->mapping != mapping) {
                        if (error)
                                break;
                        unlock_page(page);
 -                      page_cache_release(spd.pages[page_nr]);
 +                      put_page(spd.pages[page_nr]);
                        spd.pages[page_nr] = page;
                }
  
                isize = i_size_read(inode);
 -              end_index = (isize - 1) >> PAGE_CACHE_SHIFT;
 +              end_index = (isize - 1) >> PAGE_SHIFT;
                if (unlikely(!isize || index > end_index))
                        break;
  
                if (end_index == index) {
                        unsigned int plen;
  
 -                      plen = ((isize - 1) & ~PAGE_CACHE_MASK) + 1;
 +                      plen = ((isize - 1) & ~PAGE_MASK) + 1;
                        if (plen <= loff)
                                break;
  
        }
  
        while (page_nr < nr_pages)
 -              page_cache_release(spd.pages[page_nr++]);
 +              put_page(spd.pages[page_nr++]);
  
        if (spd.nr_pages)
                error = splice_to_pipe(pipe, &spd);
@@@ -1904,10 -1904,10 +1904,10 @@@ static loff_t shmem_file_llseek(struct 
        else if (offset >= inode->i_size)
                offset = -ENXIO;
        else {
 -              start = offset >> PAGE_CACHE_SHIFT;
 -              end = (inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 +              start = offset >> PAGE_SHIFT;
 +              end = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT;
                new_offset = shmem_seek_hole_data(mapping, start, end, whence);
 -              new_offset <<= PAGE_CACHE_SHIFT;
 +              new_offset <<= PAGE_SHIFT;
                if (new_offset > offset) {
                        if (new_offset < inode->i_size)
                                offset = new_offset;
@@@ -2203,8 -2203,8 +2203,8 @@@ static long shmem_fallocate(struct fil
                goto out;
        }
  
 -      start = offset >> PAGE_CACHE_SHIFT;
 -      end = (offset + len + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 +      start = offset >> PAGE_SHIFT;
 +      end = (offset + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
        /* Try to avoid a swapstorm if len is impossible to satisfy */
        if (sbinfo->max_blocks && end - start > sbinfo->max_blocks) {
                error = -ENOSPC;
                if (error) {
                        /* Remove the !PageUptodate pages we added */
                        shmem_undo_range(inode,
 -                              (loff_t)start << PAGE_CACHE_SHIFT,
 -                              (loff_t)index << PAGE_CACHE_SHIFT, true);
 +                              (loff_t)start << PAGE_SHIFT,
 +                              (loff_t)index << PAGE_SHIFT, true);
                        goto undone;
                }
  
                 */
                set_page_dirty(page);
                unlock_page(page);
 -              page_cache_release(page);
 +              put_page(page);
                cond_resched();
        }
  
@@@ -2280,7 -2280,7 +2280,7 @@@ static int shmem_statfs(struct dentry *
        struct shmem_sb_info *sbinfo = SHMEM_SB(dentry->d_sb);
  
        buf->f_type = TMPFS_MAGIC;
 -      buf->f_bsize = PAGE_CACHE_SIZE;
 +      buf->f_bsize = PAGE_SIZE;
        buf->f_namelen = NAME_MAX;
        if (sbinfo->max_blocks) {
                buf->f_blocks = sbinfo->max_blocks;
@@@ -2523,7 -2523,7 +2523,7 @@@ static int shmem_symlink(struct inode *
        struct shmem_inode_info *info;
  
        len = strlen(symname) + 1;
 -      if (len > PAGE_CACHE_SIZE)
 +      if (len > PAGE_SIZE)
                return -ENAMETOOLONG;
  
        inode = shmem_get_inode(dir->i_sb, dir, S_IFLNK|S_IRWXUGO, 0, VM_NORESERVE);
                SetPageUptodate(page);
                set_page_dirty(page);
                unlock_page(page);
 -              page_cache_release(page);
 +              put_page(page);
        }
        dir->i_size += BOGO_DIRENT_SIZE;
        dir->i_ctime = dir->i_mtime = CURRENT_TIME;
@@@ -2646,10 -2646,10 +2646,10 @@@ static int shmem_initxattrs(struct inod
  }
  
  static int shmem_xattr_handler_get(const struct xattr_handler *handler,
-                                  struct dentry *dentry, const char *name,
-                                  void *buffer, size_t size)
+                                  struct dentry *unused, struct inode *inode,
+                                  const char *name, void *buffer, size_t size)
  {
-       struct shmem_inode_info *info = SHMEM_I(d_inode(dentry));
+       struct shmem_inode_info *info = SHMEM_I(inode);
  
        name = xattr_full_name(handler, name);
        return simple_xattr_get(&info->xattrs, name, buffer, size);
@@@ -2835,7 -2835,7 +2835,7 @@@ static int shmem_parse_options(char *op
                        if (*rest)
                                goto bad_val;
                        sbinfo->max_blocks =
 -                              DIV_ROUND_UP(size, PAGE_CACHE_SIZE);
 +                              DIV_ROUND_UP(size, PAGE_SIZE);
                } else if (!strcmp(this_char,"nr_blocks")) {
                        sbinfo->max_blocks = memparse(value, &rest);
                        if (*rest)
@@@ -2940,7 -2940,7 +2940,7 @@@ static int shmem_show_options(struct se
  
        if (sbinfo->max_blocks != shmem_default_max_blocks())
                seq_printf(seq, ",size=%luk",
 -                      sbinfo->max_blocks << (PAGE_CACHE_SHIFT - 10));
 +                      sbinfo->max_blocks << (PAGE_SHIFT - 10));
        if (sbinfo->max_inodes != shmem_default_max_inodes())
                seq_printf(seq, ",nr_inodes=%lu", sbinfo->max_inodes);
        if (sbinfo->mode != (S_IRWXUGO | S_ISVTX))
@@@ -3082,8 -3082,8 +3082,8 @@@ int shmem_fill_super(struct super_bloc
        sbinfo->free_inodes = sbinfo->max_inodes;
  
        sb->s_maxbytes = MAX_LFS_FILESIZE;
 -      sb->s_blocksize = PAGE_CACHE_SIZE;
 -      sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
 +      sb->s_blocksize = PAGE_SIZE;
 +      sb->s_blocksize_bits = PAGE_SHIFT;
        sb->s_magic = TMPFS_MAGIC;
        sb->s_op = &shmem_ops;
        sb->s_time_gran = 1;