Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  *  linux/fs/nfs/dir.c
0004  *
0005  *  Copyright (C) 1992  Rick Sladkey
0006  *
0007  *  nfs directory handling functions
0008  *
0009  * 10 Apr 1996  Added silly rename for unlink   --okir
0010  * 28 Sep 1996  Improved directory cache --okir
0011  * 23 Aug 1997  Claus Heine claus@momo.math.rwth-aachen.de 
0012  *              Re-implemented silly rename for unlink, newly implemented
0013  *              silly rename for nfs_rename() following the suggestions
0014  *              of Olaf Kirch (okir) found in this file.
0015  *              Following Linus comments on my original hack, this version
0016  *              depends only on the dcache stuff and doesn't touch the inode
0017  *              layer (iput() and friends).
0018  *  6 Jun 1999  Cache readdir lookups in the page cache. -DaveM
0019  */
0020 
0021 #include <linux/compat.h>
0022 #include <linux/module.h>
0023 #include <linux/time.h>
0024 #include <linux/errno.h>
0025 #include <linux/stat.h>
0026 #include <linux/fcntl.h>
0027 #include <linux/string.h>
0028 #include <linux/kernel.h>
0029 #include <linux/slab.h>
0030 #include <linux/mm.h>
0031 #include <linux/sunrpc/clnt.h>
0032 #include <linux/nfs_fs.h>
0033 #include <linux/nfs_mount.h>
0034 #include <linux/pagemap.h>
0035 #include <linux/pagevec.h>
0036 #include <linux/namei.h>
0037 #include <linux/mount.h>
0038 #include <linux/swap.h>
0039 #include <linux/sched.h>
0040 #include <linux/kmemleak.h>
0041 #include <linux/xattr.h>
0042 #include <linux/hash.h>
0043 
0044 #include "delegation.h"
0045 #include "iostat.h"
0046 #include "internal.h"
0047 #include "fscache.h"
0048 
0049 #include "nfstrace.h"
0050 
0051 /* #define NFS_DEBUG_VERBOSE 1 */
0052 
0053 static int nfs_opendir(struct inode *, struct file *);
0054 static int nfs_closedir(struct inode *, struct file *);
0055 static int nfs_readdir(struct file *, struct dir_context *);
0056 static int nfs_fsync_dir(struct file *, loff_t, loff_t, int);
0057 static loff_t nfs_llseek_dir(struct file *, loff_t, int);
0058 static void nfs_readdir_free_folio(struct folio *);
0059 
0060 const struct file_operations nfs_dir_operations = {
0061     .llseek     = nfs_llseek_dir,
0062     .read       = generic_read_dir,
0063     .iterate_shared = nfs_readdir,
0064     .open       = nfs_opendir,
0065     .release    = nfs_closedir,
0066     .fsync      = nfs_fsync_dir,
0067 };
0068 
0069 const struct address_space_operations nfs_dir_aops = {
0070     .free_folio = nfs_readdir_free_folio,
0071 };
0072 
0073 #define NFS_INIT_DTSIZE PAGE_SIZE
0074 
0075 static struct nfs_open_dir_context *
0076 alloc_nfs_open_dir_context(struct inode *dir)
0077 {
0078     struct nfs_inode *nfsi = NFS_I(dir);
0079     struct nfs_open_dir_context *ctx;
0080 
0081     ctx = kzalloc(sizeof(*ctx), GFP_KERNEL_ACCOUNT);
0082     if (ctx != NULL) {
0083         ctx->attr_gencount = nfsi->attr_gencount;
0084         ctx->dtsize = NFS_INIT_DTSIZE;
0085         spin_lock(&dir->i_lock);
0086         if (list_empty(&nfsi->open_files) &&
0087             (nfsi->cache_validity & NFS_INO_DATA_INVAL_DEFER))
0088             nfs_set_cache_invalid(dir,
0089                           NFS_INO_INVALID_DATA |
0090                               NFS_INO_REVAL_FORCED);
0091         list_add_tail_rcu(&ctx->list, &nfsi->open_files);
0092         memcpy(ctx->verf, nfsi->cookieverf, sizeof(ctx->verf));
0093         spin_unlock(&dir->i_lock);
0094         return ctx;
0095     }
0096     return  ERR_PTR(-ENOMEM);
0097 }
0098 
0099 static void put_nfs_open_dir_context(struct inode *dir, struct nfs_open_dir_context *ctx)
0100 {
0101     spin_lock(&dir->i_lock);
0102     list_del_rcu(&ctx->list);
0103     spin_unlock(&dir->i_lock);
0104     kfree_rcu(ctx, rcu_head);
0105 }
0106 
0107 /*
0108  * Open file
0109  */
0110 static int
0111 nfs_opendir(struct inode *inode, struct file *filp)
0112 {
0113     int res = 0;
0114     struct nfs_open_dir_context *ctx;
0115 
0116     dfprintk(FILE, "NFS: open dir(%pD2)\n", filp);
0117 
0118     nfs_inc_stats(inode, NFSIOS_VFSOPEN);
0119 
0120     ctx = alloc_nfs_open_dir_context(inode);
0121     if (IS_ERR(ctx)) {
0122         res = PTR_ERR(ctx);
0123         goto out;
0124     }
0125     filp->private_data = ctx;
0126 out:
0127     return res;
0128 }
0129 
0130 static int
0131 nfs_closedir(struct inode *inode, struct file *filp)
0132 {
0133     put_nfs_open_dir_context(file_inode(filp), filp->private_data);
0134     return 0;
0135 }
0136 
0137 struct nfs_cache_array_entry {
0138     u64 cookie;
0139     u64 ino;
0140     const char *name;
0141     unsigned int name_len;
0142     unsigned char d_type;
0143 };
0144 
0145 struct nfs_cache_array {
0146     u64 change_attr;
0147     u64 last_cookie;
0148     unsigned int size;
0149     unsigned char page_full : 1,
0150               page_is_eof : 1,
0151               cookies_are_ordered : 1;
0152     struct nfs_cache_array_entry array[];
0153 };
0154 
0155 struct nfs_readdir_descriptor {
0156     struct file *file;
0157     struct page *page;
0158     struct dir_context *ctx;
0159     pgoff_t     page_index;
0160     pgoff_t     page_index_max;
0161     u64     dir_cookie;
0162     u64     last_cookie;
0163     loff_t      current_index;
0164 
0165     __be32      verf[NFS_DIR_VERIFIER_SIZE];
0166     unsigned long   dir_verifier;
0167     unsigned long   timestamp;
0168     unsigned long   gencount;
0169     unsigned long   attr_gencount;
0170     unsigned int    cache_entry_index;
0171     unsigned int    buffer_fills;
0172     unsigned int    dtsize;
0173     bool clear_cache;
0174     bool plus;
0175     bool eob;
0176     bool eof;
0177 };
0178 
0179 static void nfs_set_dtsize(struct nfs_readdir_descriptor *desc, unsigned int sz)
0180 {
0181     struct nfs_server *server = NFS_SERVER(file_inode(desc->file));
0182     unsigned int maxsize = server->dtsize;
0183 
0184     if (sz > maxsize)
0185         sz = maxsize;
0186     if (sz < NFS_MIN_FILE_IO_SIZE)
0187         sz = NFS_MIN_FILE_IO_SIZE;
0188     desc->dtsize = sz;
0189 }
0190 
0191 static void nfs_shrink_dtsize(struct nfs_readdir_descriptor *desc)
0192 {
0193     nfs_set_dtsize(desc, desc->dtsize >> 1);
0194 }
0195 
0196 static void nfs_grow_dtsize(struct nfs_readdir_descriptor *desc)
0197 {
0198     nfs_set_dtsize(desc, desc->dtsize << 1);
0199 }
0200 
0201 static void nfs_readdir_page_init_array(struct page *page, u64 last_cookie,
0202                     u64 change_attr)
0203 {
0204     struct nfs_cache_array *array;
0205 
0206     array = kmap_atomic(page);
0207     array->change_attr = change_attr;
0208     array->last_cookie = last_cookie;
0209     array->size = 0;
0210     array->page_full = 0;
0211     array->page_is_eof = 0;
0212     array->cookies_are_ordered = 1;
0213     kunmap_atomic(array);
0214 }
0215 
0216 /*
0217  * we are freeing strings created by nfs_add_to_readdir_array()
0218  */
0219 static void nfs_readdir_clear_array(struct page *page)
0220 {
0221     struct nfs_cache_array *array;
0222     unsigned int i;
0223 
0224     array = kmap_atomic(page);
0225     for (i = 0; i < array->size; i++)
0226         kfree(array->array[i].name);
0227     array->size = 0;
0228     kunmap_atomic(array);
0229 }
0230 
0231 static void nfs_readdir_free_folio(struct folio *folio)
0232 {
0233     nfs_readdir_clear_array(&folio->page);
0234 }
0235 
0236 static void nfs_readdir_page_reinit_array(struct page *page, u64 last_cookie,
0237                       u64 change_attr)
0238 {
0239     nfs_readdir_clear_array(page);
0240     nfs_readdir_page_init_array(page, last_cookie, change_attr);
0241 }
0242 
0243 static struct page *
0244 nfs_readdir_page_array_alloc(u64 last_cookie, gfp_t gfp_flags)
0245 {
0246     struct page *page = alloc_page(gfp_flags);
0247     if (page)
0248         nfs_readdir_page_init_array(page, last_cookie, 0);
0249     return page;
0250 }
0251 
0252 static void nfs_readdir_page_array_free(struct page *page)
0253 {
0254     if (page) {
0255         nfs_readdir_clear_array(page);
0256         put_page(page);
0257     }
0258 }
0259 
0260 static u64 nfs_readdir_array_index_cookie(struct nfs_cache_array *array)
0261 {
0262     return array->size == 0 ? array->last_cookie : array->array[0].cookie;
0263 }
0264 
0265 static void nfs_readdir_array_set_eof(struct nfs_cache_array *array)
0266 {
0267     array->page_is_eof = 1;
0268     array->page_full = 1;
0269 }
0270 
0271 static bool nfs_readdir_array_is_full(struct nfs_cache_array *array)
0272 {
0273     return array->page_full;
0274 }
0275 
0276 /*
0277  * the caller is responsible for freeing qstr.name
0278  * when called by nfs_readdir_add_to_array, the strings will be freed in
0279  * nfs_clear_readdir_array()
0280  */
0281 static const char *nfs_readdir_copy_name(const char *name, unsigned int len)
0282 {
0283     const char *ret = kmemdup_nul(name, len, GFP_KERNEL);
0284 
0285     /*
0286      * Avoid a kmemleak false positive. The pointer to the name is stored
0287      * in a page cache page which kmemleak does not scan.
0288      */
0289     if (ret != NULL)
0290         kmemleak_not_leak(ret);
0291     return ret;
0292 }
0293 
0294 static size_t nfs_readdir_array_maxentries(void)
0295 {
0296     return (PAGE_SIZE - sizeof(struct nfs_cache_array)) /
0297            sizeof(struct nfs_cache_array_entry);
0298 }
0299 
0300 /*
0301  * Check that the next array entry lies entirely within the page bounds
0302  */
0303 static int nfs_readdir_array_can_expand(struct nfs_cache_array *array)
0304 {
0305     if (array->page_full)
0306         return -ENOSPC;
0307     if (array->size == nfs_readdir_array_maxentries()) {
0308         array->page_full = 1;
0309         return -ENOSPC;
0310     }
0311     return 0;
0312 }
0313 
0314 static int nfs_readdir_page_array_append(struct page *page,
0315                      const struct nfs_entry *entry,
0316                      u64 *cookie)
0317 {
0318     struct nfs_cache_array *array;
0319     struct nfs_cache_array_entry *cache_entry;
0320     const char *name;
0321     int ret = -ENOMEM;
0322 
0323     name = nfs_readdir_copy_name(entry->name, entry->len);
0324 
0325     array = kmap_atomic(page);
0326     if (!name)
0327         goto out;
0328     ret = nfs_readdir_array_can_expand(array);
0329     if (ret) {
0330         kfree(name);
0331         goto out;
0332     }
0333 
0334     cache_entry = &array->array[array->size];
0335     cache_entry->cookie = array->last_cookie;
0336     cache_entry->ino = entry->ino;
0337     cache_entry->d_type = entry->d_type;
0338     cache_entry->name_len = entry->len;
0339     cache_entry->name = name;
0340     array->last_cookie = entry->cookie;
0341     if (array->last_cookie <= cache_entry->cookie)
0342         array->cookies_are_ordered = 0;
0343     array->size++;
0344     if (entry->eof != 0)
0345         nfs_readdir_array_set_eof(array);
0346 out:
0347     *cookie = array->last_cookie;
0348     kunmap_atomic(array);
0349     return ret;
0350 }
0351 
0352 #define NFS_READDIR_COOKIE_MASK (U32_MAX >> 14)
0353 /*
0354  * Hash algorithm allowing content addressible access to sequences
0355  * of directory cookies. Content is addressed by the value of the
0356  * cookie index of the first readdir entry in a page.
0357  *
0358  * We select only the first 18 bits to avoid issues with excessive
0359  * memory use for the page cache XArray. 18 bits should allow the caching
0360  * of 262144 pages of sequences of readdir entries. Since each page holds
0361  * 127 readdir entries for a typical 64-bit system, that works out to a
0362  * cache of ~ 33 million entries per directory.
0363  */
0364 static pgoff_t nfs_readdir_page_cookie_hash(u64 cookie)
0365 {
0366     if (cookie == 0)
0367         return 0;
0368     return hash_64(cookie, 18);
0369 }
0370 
0371 static bool nfs_readdir_page_validate(struct page *page, u64 last_cookie,
0372                       u64 change_attr)
0373 {
0374     struct nfs_cache_array *array = kmap_atomic(page);
0375     int ret = true;
0376 
0377     if (array->change_attr != change_attr)
0378         ret = false;
0379     if (nfs_readdir_array_index_cookie(array) != last_cookie)
0380         ret = false;
0381     kunmap_atomic(array);
0382     return ret;
0383 }
0384 
0385 static void nfs_readdir_page_unlock_and_put(struct page *page)
0386 {
0387     unlock_page(page);
0388     put_page(page);
0389 }
0390 
0391 static void nfs_readdir_page_init_and_validate(struct page *page, u64 cookie,
0392                            u64 change_attr)
0393 {
0394     if (PageUptodate(page)) {
0395         if (nfs_readdir_page_validate(page, cookie, change_attr))
0396             return;
0397         nfs_readdir_clear_array(page);
0398     }
0399     nfs_readdir_page_init_array(page, cookie, change_attr);
0400     SetPageUptodate(page);
0401 }
0402 
0403 static struct page *nfs_readdir_page_get_locked(struct address_space *mapping,
0404                         u64 cookie, u64 change_attr)
0405 {
0406     pgoff_t index = nfs_readdir_page_cookie_hash(cookie);
0407     struct page *page;
0408 
0409     page = grab_cache_page(mapping, index);
0410     if (!page)
0411         return NULL;
0412     nfs_readdir_page_init_and_validate(page, cookie, change_attr);
0413     return page;
0414 }
0415 
0416 static u64 nfs_readdir_page_last_cookie(struct page *page)
0417 {
0418     struct nfs_cache_array *array;
0419     u64 ret;
0420 
0421     array = kmap_atomic(page);
0422     ret = array->last_cookie;
0423     kunmap_atomic(array);
0424     return ret;
0425 }
0426 
0427 static bool nfs_readdir_page_needs_filling(struct page *page)
0428 {
0429     struct nfs_cache_array *array;
0430     bool ret;
0431 
0432     array = kmap_atomic(page);
0433     ret = !nfs_readdir_array_is_full(array);
0434     kunmap_atomic(array);
0435     return ret;
0436 }
0437 
0438 static void nfs_readdir_page_set_eof(struct page *page)
0439 {
0440     struct nfs_cache_array *array;
0441 
0442     array = kmap_atomic(page);
0443     nfs_readdir_array_set_eof(array);
0444     kunmap_atomic(array);
0445 }
0446 
0447 static struct page *nfs_readdir_page_get_next(struct address_space *mapping,
0448                           u64 cookie, u64 change_attr)
0449 {
0450     pgoff_t index = nfs_readdir_page_cookie_hash(cookie);
0451     struct page *page;
0452 
0453     page = grab_cache_page_nowait(mapping, index);
0454     if (!page)
0455         return NULL;
0456     nfs_readdir_page_init_and_validate(page, cookie, change_attr);
0457     if (nfs_readdir_page_last_cookie(page) != cookie)
0458         nfs_readdir_page_reinit_array(page, cookie, change_attr);
0459     return page;
0460 }
0461 
0462 static inline
0463 int is_32bit_api(void)
0464 {
0465 #ifdef CONFIG_COMPAT
0466     return in_compat_syscall();
0467 #else
0468     return (BITS_PER_LONG == 32);
0469 #endif
0470 }
0471 
0472 static
0473 bool nfs_readdir_use_cookie(const struct file *filp)
0474 {
0475     if ((filp->f_mode & FMODE_32BITHASH) ||
0476         (!(filp->f_mode & FMODE_64BITHASH) && is_32bit_api()))
0477         return false;
0478     return true;
0479 }
0480 
0481 static void nfs_readdir_seek_next_array(struct nfs_cache_array *array,
0482                     struct nfs_readdir_descriptor *desc)
0483 {
0484     if (array->page_full) {
0485         desc->last_cookie = array->last_cookie;
0486         desc->current_index += array->size;
0487         desc->cache_entry_index = 0;
0488         desc->page_index++;
0489     } else
0490         desc->last_cookie = nfs_readdir_array_index_cookie(array);
0491 }
0492 
0493 static void nfs_readdir_rewind_search(struct nfs_readdir_descriptor *desc)
0494 {
0495     desc->current_index = 0;
0496     desc->last_cookie = 0;
0497     desc->page_index = 0;
0498 }
0499 
0500 static int nfs_readdir_search_for_pos(struct nfs_cache_array *array,
0501                       struct nfs_readdir_descriptor *desc)
0502 {
0503     loff_t diff = desc->ctx->pos - desc->current_index;
0504     unsigned int index;
0505 
0506     if (diff < 0)
0507         goto out_eof;
0508     if (diff >= array->size) {
0509         if (array->page_is_eof)
0510             goto out_eof;
0511         nfs_readdir_seek_next_array(array, desc);
0512         return -EAGAIN;
0513     }
0514 
0515     index = (unsigned int)diff;
0516     desc->dir_cookie = array->array[index].cookie;
0517     desc->cache_entry_index = index;
0518     return 0;
0519 out_eof:
0520     desc->eof = true;
0521     return -EBADCOOKIE;
0522 }
0523 
0524 static bool nfs_readdir_array_cookie_in_range(struct nfs_cache_array *array,
0525                           u64 cookie)
0526 {
0527     if (!array->cookies_are_ordered)
0528         return true;
0529     /* Optimisation for monotonically increasing cookies */
0530     if (cookie >= array->last_cookie)
0531         return false;
0532     if (array->size && cookie < array->array[0].cookie)
0533         return false;
0534     return true;
0535 }
0536 
0537 static int nfs_readdir_search_for_cookie(struct nfs_cache_array *array,
0538                      struct nfs_readdir_descriptor *desc)
0539 {
0540     unsigned int i;
0541     int status = -EAGAIN;
0542 
0543     if (!nfs_readdir_array_cookie_in_range(array, desc->dir_cookie))
0544         goto check_eof;
0545 
0546     for (i = 0; i < array->size; i++) {
0547         if (array->array[i].cookie == desc->dir_cookie) {
0548             if (nfs_readdir_use_cookie(desc->file))
0549                 desc->ctx->pos = desc->dir_cookie;
0550             else
0551                 desc->ctx->pos = desc->current_index + i;
0552             desc->cache_entry_index = i;
0553             return 0;
0554         }
0555     }
0556 check_eof:
0557     if (array->page_is_eof) {
0558         status = -EBADCOOKIE;
0559         if (desc->dir_cookie == array->last_cookie)
0560             desc->eof = true;
0561     } else
0562         nfs_readdir_seek_next_array(array, desc);
0563     return status;
0564 }
0565 
0566 static int nfs_readdir_search_array(struct nfs_readdir_descriptor *desc)
0567 {
0568     struct nfs_cache_array *array;
0569     int status;
0570 
0571     array = kmap_atomic(desc->page);
0572 
0573     if (desc->dir_cookie == 0)
0574         status = nfs_readdir_search_for_pos(array, desc);
0575     else
0576         status = nfs_readdir_search_for_cookie(array, desc);
0577 
0578     kunmap_atomic(array);
0579     return status;
0580 }
0581 
0582 /* Fill a page with xdr information before transferring to the cache page */
0583 static int nfs_readdir_xdr_filler(struct nfs_readdir_descriptor *desc,
0584                   __be32 *verf, u64 cookie,
0585                   struct page **pages, size_t bufsize,
0586                   __be32 *verf_res)
0587 {
0588     struct inode *inode = file_inode(desc->file);
0589     struct nfs_readdir_arg arg = {
0590         .dentry = file_dentry(desc->file),
0591         .cred = desc->file->f_cred,
0592         .verf = verf,
0593         .cookie = cookie,
0594         .pages = pages,
0595         .page_len = bufsize,
0596         .plus = desc->plus,
0597     };
0598     struct nfs_readdir_res res = {
0599         .verf = verf_res,
0600     };
0601     unsigned long   timestamp, gencount;
0602     int     error;
0603 
0604  again:
0605     timestamp = jiffies;
0606     gencount = nfs_inc_attr_generation_counter();
0607     desc->dir_verifier = nfs_save_change_attribute(inode);
0608     error = NFS_PROTO(inode)->readdir(&arg, &res);
0609     if (error < 0) {
0610         /* We requested READDIRPLUS, but the server doesn't grok it */
0611         if (error == -ENOTSUPP && desc->plus) {
0612             NFS_SERVER(inode)->caps &= ~NFS_CAP_READDIRPLUS;
0613             desc->plus = arg.plus = false;
0614             goto again;
0615         }
0616         goto error;
0617     }
0618     desc->timestamp = timestamp;
0619     desc->gencount = gencount;
0620 error:
0621     return error;
0622 }
0623 
0624 static int xdr_decode(struct nfs_readdir_descriptor *desc,
0625               struct nfs_entry *entry, struct xdr_stream *xdr)
0626 {
0627     struct inode *inode = file_inode(desc->file);
0628     int error;
0629 
0630     error = NFS_PROTO(inode)->decode_dirent(xdr, entry, desc->plus);
0631     if (error)
0632         return error;
0633     entry->fattr->time_start = desc->timestamp;
0634     entry->fattr->gencount = desc->gencount;
0635     return 0;
0636 }
0637 
0638 /* Match file and dirent using either filehandle or fileid
0639  * Note: caller is responsible for checking the fsid
0640  */
0641 static
0642 int nfs_same_file(struct dentry *dentry, struct nfs_entry *entry)
0643 {
0644     struct inode *inode;
0645     struct nfs_inode *nfsi;
0646 
0647     if (d_really_is_negative(dentry))
0648         return 0;
0649 
0650     inode = d_inode(dentry);
0651     if (is_bad_inode(inode) || NFS_STALE(inode))
0652         return 0;
0653 
0654     nfsi = NFS_I(inode);
0655     if (entry->fattr->fileid != nfsi->fileid)
0656         return 0;
0657     if (entry->fh->size && nfs_compare_fh(entry->fh, &nfsi->fh) != 0)
0658         return 0;
0659     return 1;
0660 }
0661 
0662 #define NFS_READDIR_CACHE_USAGE_THRESHOLD (8UL)
0663 
0664 static bool nfs_use_readdirplus(struct inode *dir, struct dir_context *ctx,
0665                 unsigned int cache_hits,
0666                 unsigned int cache_misses)
0667 {
0668     if (!nfs_server_capable(dir, NFS_CAP_READDIRPLUS))
0669         return false;
0670     if (ctx->pos == 0 ||
0671         cache_hits + cache_misses > NFS_READDIR_CACHE_USAGE_THRESHOLD)
0672         return true;
0673     return false;
0674 }
0675 
0676 /*
0677  * This function is called by the getattr code to request the
0678  * use of readdirplus to accelerate any future lookups in the same
0679  * directory.
0680  */
0681 void nfs_readdir_record_entry_cache_hit(struct inode *dir)
0682 {
0683     struct nfs_inode *nfsi = NFS_I(dir);
0684     struct nfs_open_dir_context *ctx;
0685 
0686     if (nfs_server_capable(dir, NFS_CAP_READDIRPLUS) &&
0687         S_ISDIR(dir->i_mode)) {
0688         rcu_read_lock();
0689         list_for_each_entry_rcu (ctx, &nfsi->open_files, list)
0690             atomic_inc(&ctx->cache_hits);
0691         rcu_read_unlock();
0692     }
0693 }
0694 
0695 /*
0696  * This function is mainly for use by nfs_getattr().
0697  *
0698  * If this is an 'ls -l', we want to force use of readdirplus.
0699  */
0700 void nfs_readdir_record_entry_cache_miss(struct inode *dir)
0701 {
0702     struct nfs_inode *nfsi = NFS_I(dir);
0703     struct nfs_open_dir_context *ctx;
0704 
0705     if (nfs_server_capable(dir, NFS_CAP_READDIRPLUS) &&
0706         S_ISDIR(dir->i_mode)) {
0707         rcu_read_lock();
0708         list_for_each_entry_rcu (ctx, &nfsi->open_files, list)
0709             atomic_inc(&ctx->cache_misses);
0710         rcu_read_unlock();
0711     }
0712 }
0713 
0714 static void nfs_lookup_advise_force_readdirplus(struct inode *dir,
0715                         unsigned int flags)
0716 {
0717     if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE))
0718         return;
0719     if (flags & (LOOKUP_EXCL | LOOKUP_PARENT | LOOKUP_REVAL))
0720         return;
0721     nfs_readdir_record_entry_cache_miss(dir);
0722 }
0723 
0724 static
0725 void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry,
0726         unsigned long dir_verifier)
0727 {
0728     struct qstr filename = QSTR_INIT(entry->name, entry->len);
0729     DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
0730     struct dentry *dentry;
0731     struct dentry *alias;
0732     struct inode *inode;
0733     int status;
0734 
0735     if (!(entry->fattr->valid & NFS_ATTR_FATTR_FILEID))
0736         return;
0737     if (!(entry->fattr->valid & NFS_ATTR_FATTR_FSID))
0738         return;
0739     if (filename.len == 0)
0740         return;
0741     /* Validate that the name doesn't contain any illegal '\0' */
0742     if (strnlen(filename.name, filename.len) != filename.len)
0743         return;
0744     /* ...or '/' */
0745     if (strnchr(filename.name, filename.len, '/'))
0746         return;
0747     if (filename.name[0] == '.') {
0748         if (filename.len == 1)
0749             return;
0750         if (filename.len == 2 && filename.name[1] == '.')
0751             return;
0752     }
0753     filename.hash = full_name_hash(parent, filename.name, filename.len);
0754 
0755     dentry = d_lookup(parent, &filename);
0756 again:
0757     if (!dentry) {
0758         dentry = d_alloc_parallel(parent, &filename, &wq);
0759         if (IS_ERR(dentry))
0760             return;
0761     }
0762     if (!d_in_lookup(dentry)) {
0763         /* Is there a mountpoint here? If so, just exit */
0764         if (!nfs_fsid_equal(&NFS_SB(dentry->d_sb)->fsid,
0765                     &entry->fattr->fsid))
0766             goto out;
0767         if (nfs_same_file(dentry, entry)) {
0768             if (!entry->fh->size)
0769                 goto out;
0770             nfs_set_verifier(dentry, dir_verifier);
0771             status = nfs_refresh_inode(d_inode(dentry), entry->fattr);
0772             if (!status)
0773                 nfs_setsecurity(d_inode(dentry), entry->fattr);
0774             trace_nfs_readdir_lookup_revalidate(d_inode(parent),
0775                                 dentry, 0, status);
0776             goto out;
0777         } else {
0778             trace_nfs_readdir_lookup_revalidate_failed(
0779                 d_inode(parent), dentry, 0);
0780             d_invalidate(dentry);
0781             dput(dentry);
0782             dentry = NULL;
0783             goto again;
0784         }
0785     }
0786     if (!entry->fh->size) {
0787         d_lookup_done(dentry);
0788         goto out;
0789     }
0790 
0791     inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr);
0792     alias = d_splice_alias(inode, dentry);
0793     d_lookup_done(dentry);
0794     if (alias) {
0795         if (IS_ERR(alias))
0796             goto out;
0797         dput(dentry);
0798         dentry = alias;
0799     }
0800     nfs_set_verifier(dentry, dir_verifier);
0801     trace_nfs_readdir_lookup(d_inode(parent), dentry, 0);
0802 out:
0803     dput(dentry);
0804 }
0805 
0806 static int nfs_readdir_entry_decode(struct nfs_readdir_descriptor *desc,
0807                     struct nfs_entry *entry,
0808                     struct xdr_stream *stream)
0809 {
0810     int ret;
0811 
0812     if (entry->fattr->label)
0813         entry->fattr->label->len = NFS4_MAXLABELLEN;
0814     ret = xdr_decode(desc, entry, stream);
0815     if (ret || !desc->plus)
0816         return ret;
0817     nfs_prime_dcache(file_dentry(desc->file), entry, desc->dir_verifier);
0818     return 0;
0819 }
0820 
0821 /* Perform conversion from xdr to cache array */
0822 static int nfs_readdir_page_filler(struct nfs_readdir_descriptor *desc,
0823                    struct nfs_entry *entry,
0824                    struct page **xdr_pages, unsigned int buflen,
0825                    struct page **arrays, size_t narrays,
0826                    u64 change_attr)
0827 {
0828     struct address_space *mapping = desc->file->f_mapping;
0829     struct xdr_stream stream;
0830     struct xdr_buf buf;
0831     struct page *scratch, *new, *page = *arrays;
0832     u64 cookie;
0833     int status;
0834 
0835     scratch = alloc_page(GFP_KERNEL);
0836     if (scratch == NULL)
0837         return -ENOMEM;
0838 
0839     xdr_init_decode_pages(&stream, &buf, xdr_pages, buflen);
0840     xdr_set_scratch_page(&stream, scratch);
0841 
0842     do {
0843         status = nfs_readdir_entry_decode(desc, entry, &stream);
0844         if (status != 0)
0845             break;
0846 
0847         status = nfs_readdir_page_array_append(page, entry, &cookie);
0848         if (status != -ENOSPC)
0849             continue;
0850 
0851         if (page->mapping != mapping) {
0852             if (!--narrays)
0853                 break;
0854             new = nfs_readdir_page_array_alloc(cookie, GFP_KERNEL);
0855             if (!new)
0856                 break;
0857             arrays++;
0858             *arrays = page = new;
0859         } else {
0860             new = nfs_readdir_page_get_next(mapping, cookie,
0861                             change_attr);
0862             if (!new)
0863                 break;
0864             if (page != *arrays)
0865                 nfs_readdir_page_unlock_and_put(page);
0866             page = new;
0867         }
0868         desc->page_index_max++;
0869         status = nfs_readdir_page_array_append(page, entry, &cookie);
0870     } while (!status && !entry->eof);
0871 
0872     switch (status) {
0873     case -EBADCOOKIE:
0874         if (!entry->eof)
0875             break;
0876         nfs_readdir_page_set_eof(page);
0877         fallthrough;
0878     case -EAGAIN:
0879         status = 0;
0880         break;
0881     case -ENOSPC:
0882         status = 0;
0883         if (!desc->plus)
0884             break;
0885         while (!nfs_readdir_entry_decode(desc, entry, &stream))
0886             ;
0887     }
0888 
0889     if (page != *arrays)
0890         nfs_readdir_page_unlock_and_put(page);
0891 
0892     put_page(scratch);
0893     return status;
0894 }
0895 
0896 static void nfs_readdir_free_pages(struct page **pages, size_t npages)
0897 {
0898     while (npages--)
0899         put_page(pages[npages]);
0900     kfree(pages);
0901 }
0902 
0903 /*
0904  * nfs_readdir_alloc_pages() will allocate pages that must be freed with a call
0905  * to nfs_readdir_free_pages()
0906  */
0907 static struct page **nfs_readdir_alloc_pages(size_t npages)
0908 {
0909     struct page **pages;
0910     size_t i;
0911 
0912     pages = kmalloc_array(npages, sizeof(*pages), GFP_KERNEL);
0913     if (!pages)
0914         return NULL;
0915     for (i = 0; i < npages; i++) {
0916         struct page *page = alloc_page(GFP_KERNEL);
0917         if (page == NULL)
0918             goto out_freepages;
0919         pages[i] = page;
0920     }
0921     return pages;
0922 
0923 out_freepages:
0924     nfs_readdir_free_pages(pages, i);
0925     return NULL;
0926 }
0927 
0928 static int nfs_readdir_xdr_to_array(struct nfs_readdir_descriptor *desc,
0929                     __be32 *verf_arg, __be32 *verf_res,
0930                     struct page **arrays, size_t narrays)
0931 {
0932     u64 change_attr;
0933     struct page **pages;
0934     struct page *page = *arrays;
0935     struct nfs_entry *entry;
0936     size_t array_size;
0937     struct inode *inode = file_inode(desc->file);
0938     unsigned int dtsize = desc->dtsize;
0939     unsigned int pglen;
0940     int status = -ENOMEM;
0941 
0942     entry = kzalloc(sizeof(*entry), GFP_KERNEL);
0943     if (!entry)
0944         return -ENOMEM;
0945     entry->cookie = nfs_readdir_page_last_cookie(page);
0946     entry->fh = nfs_alloc_fhandle();
0947     entry->fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
0948     entry->server = NFS_SERVER(inode);
0949     if (entry->fh == NULL || entry->fattr == NULL)
0950         goto out;
0951 
0952     array_size = (dtsize + PAGE_SIZE - 1) >> PAGE_SHIFT;
0953     pages = nfs_readdir_alloc_pages(array_size);
0954     if (!pages)
0955         goto out;
0956 
0957     change_attr = inode_peek_iversion_raw(inode);
0958     status = nfs_readdir_xdr_filler(desc, verf_arg, entry->cookie, pages,
0959                     dtsize, verf_res);
0960     if (status < 0)
0961         goto free_pages;
0962 
0963     pglen = status;
0964     if (pglen != 0)
0965         status = nfs_readdir_page_filler(desc, entry, pages, pglen,
0966                          arrays, narrays, change_attr);
0967     else
0968         nfs_readdir_page_set_eof(page);
0969     desc->buffer_fills++;
0970 
0971 free_pages:
0972     nfs_readdir_free_pages(pages, array_size);
0973 out:
0974     nfs_free_fattr(entry->fattr);
0975     nfs_free_fhandle(entry->fh);
0976     kfree(entry);
0977     return status;
0978 }
0979 
0980 static void nfs_readdir_page_put(struct nfs_readdir_descriptor *desc)
0981 {
0982     put_page(desc->page);
0983     desc->page = NULL;
0984 }
0985 
0986 static void
0987 nfs_readdir_page_unlock_and_put_cached(struct nfs_readdir_descriptor *desc)
0988 {
0989     unlock_page(desc->page);
0990     nfs_readdir_page_put(desc);
0991 }
0992 
0993 static struct page *
0994 nfs_readdir_page_get_cached(struct nfs_readdir_descriptor *desc)
0995 {
0996     struct address_space *mapping = desc->file->f_mapping;
0997     u64 change_attr = inode_peek_iversion_raw(mapping->host);
0998     u64 cookie = desc->last_cookie;
0999     struct page *page;
1000 
1001     page = nfs_readdir_page_get_locked(mapping, cookie, change_attr);
1002     if (!page)
1003         return NULL;
1004     if (desc->clear_cache && !nfs_readdir_page_needs_filling(page))
1005         nfs_readdir_page_reinit_array(page, cookie, change_attr);
1006     return page;
1007 }
1008 
1009 /*
1010  * Returns 0 if desc->dir_cookie was found on page desc->page_index
1011  * and locks the page to prevent removal from the page cache.
1012  */
1013 static int find_and_lock_cache_page(struct nfs_readdir_descriptor *desc)
1014 {
1015     struct inode *inode = file_inode(desc->file);
1016     struct nfs_inode *nfsi = NFS_I(inode);
1017     __be32 verf[NFS_DIR_VERIFIER_SIZE];
1018     int res;
1019 
1020     desc->page = nfs_readdir_page_get_cached(desc);
1021     if (!desc->page)
1022         return -ENOMEM;
1023     if (nfs_readdir_page_needs_filling(desc->page)) {
1024         /* Grow the dtsize if we had to go back for more pages */
1025         if (desc->page_index == desc->page_index_max)
1026             nfs_grow_dtsize(desc);
1027         desc->page_index_max = desc->page_index;
1028         trace_nfs_readdir_cache_fill(desc->file, nfsi->cookieverf,
1029                          desc->last_cookie,
1030                          desc->page->index, desc->dtsize);
1031         res = nfs_readdir_xdr_to_array(desc, nfsi->cookieverf, verf,
1032                            &desc->page, 1);
1033         if (res < 0) {
1034             nfs_readdir_page_unlock_and_put_cached(desc);
1035             trace_nfs_readdir_cache_fill_done(inode, res);
1036             if (res == -EBADCOOKIE || res == -ENOTSYNC) {
1037                 invalidate_inode_pages2(desc->file->f_mapping);
1038                 nfs_readdir_rewind_search(desc);
1039                 trace_nfs_readdir_invalidate_cache_range(
1040                     inode, 0, MAX_LFS_FILESIZE);
1041                 return -EAGAIN;
1042             }
1043             return res;
1044         }
1045         /*
1046          * Set the cookie verifier if the page cache was empty
1047          */
1048         if (desc->last_cookie == 0 &&
1049             memcmp(nfsi->cookieverf, verf, sizeof(nfsi->cookieverf))) {
1050             memcpy(nfsi->cookieverf, verf,
1051                    sizeof(nfsi->cookieverf));
1052             invalidate_inode_pages2_range(desc->file->f_mapping, 1,
1053                               -1);
1054             trace_nfs_readdir_invalidate_cache_range(
1055                 inode, 1, MAX_LFS_FILESIZE);
1056         }
1057         desc->clear_cache = false;
1058     }
1059     res = nfs_readdir_search_array(desc);
1060     if (res == 0)
1061         return 0;
1062     nfs_readdir_page_unlock_and_put_cached(desc);
1063     return res;
1064 }
1065 
1066 /* Search for desc->dir_cookie from the beginning of the page cache */
1067 static int readdir_search_pagecache(struct nfs_readdir_descriptor *desc)
1068 {
1069     int res;
1070 
1071     do {
1072         res = find_and_lock_cache_page(desc);
1073     } while (res == -EAGAIN);
1074     return res;
1075 }
1076 
1077 /*
1078  * Once we've found the start of the dirent within a page: fill 'er up...
1079  */
1080 static void nfs_do_filldir(struct nfs_readdir_descriptor *desc,
1081                const __be32 *verf)
1082 {
1083     struct file *file = desc->file;
1084     struct nfs_cache_array *array;
1085     unsigned int i;
1086 
1087     array = kmap_local_page(desc->page);
1088     for (i = desc->cache_entry_index; i < array->size; i++) {
1089         struct nfs_cache_array_entry *ent;
1090 
1091         ent = &array->array[i];
1092         if (!dir_emit(desc->ctx, ent->name, ent->name_len,
1093             nfs_compat_user_ino64(ent->ino), ent->d_type)) {
1094             desc->eob = true;
1095             break;
1096         }
1097         memcpy(desc->verf, verf, sizeof(desc->verf));
1098         if (i == array->size - 1) {
1099             desc->dir_cookie = array->last_cookie;
1100             nfs_readdir_seek_next_array(array, desc);
1101         } else {
1102             desc->dir_cookie = array->array[i + 1].cookie;
1103             desc->last_cookie = array->array[0].cookie;
1104         }
1105         if (nfs_readdir_use_cookie(file))
1106             desc->ctx->pos = desc->dir_cookie;
1107         else
1108             desc->ctx->pos++;
1109     }
1110     if (array->page_is_eof)
1111         desc->eof = !desc->eob;
1112 
1113     kunmap_local(array);
1114     dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %llu\n",
1115             (unsigned long long)desc->dir_cookie);
1116 }
1117 
1118 /*
1119  * If we cannot find a cookie in our cache, we suspect that this is
1120  * because it points to a deleted file, so we ask the server to return
1121  * whatever it thinks is the next entry. We then feed this to filldir.
1122  * If all goes well, we should then be able to find our way round the
1123  * cache on the next call to readdir_search_pagecache();
1124  *
1125  * NOTE: we cannot add the anonymous page to the pagecache because
1126  *   the data it contains might not be page aligned. Besides,
1127  *   we should already have a complete representation of the
1128  *   directory in the page cache by the time we get here.
1129  */
1130 static int uncached_readdir(struct nfs_readdir_descriptor *desc)
1131 {
1132     struct page **arrays;
1133     size_t      i, sz = 512;
1134     __be32      verf[NFS_DIR_VERIFIER_SIZE];
1135     int     status = -ENOMEM;
1136 
1137     dfprintk(DIRCACHE, "NFS: uncached_readdir() searching for cookie %llu\n",
1138             (unsigned long long)desc->dir_cookie);
1139 
1140     arrays = kcalloc(sz, sizeof(*arrays), GFP_KERNEL);
1141     if (!arrays)
1142         goto out;
1143     arrays[0] = nfs_readdir_page_array_alloc(desc->dir_cookie, GFP_KERNEL);
1144     if (!arrays[0])
1145         goto out;
1146 
1147     desc->page_index = 0;
1148     desc->cache_entry_index = 0;
1149     desc->last_cookie = desc->dir_cookie;
1150     desc->page_index_max = 0;
1151 
1152     trace_nfs_readdir_uncached(desc->file, desc->verf, desc->last_cookie,
1153                    -1, desc->dtsize);
1154 
1155     status = nfs_readdir_xdr_to_array(desc, desc->verf, verf, arrays, sz);
1156     if (status < 0) {
1157         trace_nfs_readdir_uncached_done(file_inode(desc->file), status);
1158         goto out_free;
1159     }
1160 
1161     for (i = 0; !desc->eob && i < sz && arrays[i]; i++) {
1162         desc->page = arrays[i];
1163         nfs_do_filldir(desc, verf);
1164     }
1165     desc->page = NULL;
1166 
1167     /*
1168      * Grow the dtsize if we have to go back for more pages,
1169      * or shrink it if we're reading too many.
1170      */
1171     if (!desc->eof) {
1172         if (!desc->eob)
1173             nfs_grow_dtsize(desc);
1174         else if (desc->buffer_fills == 1 &&
1175              i < (desc->page_index_max >> 1))
1176             nfs_shrink_dtsize(desc);
1177     }
1178 out_free:
1179     for (i = 0; i < sz && arrays[i]; i++)
1180         nfs_readdir_page_array_free(arrays[i]);
1181 out:
1182     if (!nfs_readdir_use_cookie(desc->file))
1183         nfs_readdir_rewind_search(desc);
1184     desc->page_index_max = -1;
1185     kfree(arrays);
1186     dfprintk(DIRCACHE, "NFS: %s: returns %d\n", __func__, status);
1187     return status;
1188 }
1189 
1190 #define NFS_READDIR_CACHE_MISS_THRESHOLD (16UL)
1191 
1192 static bool nfs_readdir_handle_cache_misses(struct inode *inode,
1193                         struct nfs_readdir_descriptor *desc,
1194                         unsigned int cache_misses,
1195                         bool force_clear)
1196 {
1197     if (desc->ctx->pos == 0 || !desc->plus)
1198         return false;
1199     if (cache_misses <= NFS_READDIR_CACHE_MISS_THRESHOLD && !force_clear)
1200         return false;
1201     trace_nfs_readdir_force_readdirplus(inode);
1202     return true;
1203 }
1204 
1205 /* The file offset position represents the dirent entry number.  A
1206    last cookie cache takes care of the common case of reading the
1207    whole directory.
1208  */
1209 static int nfs_readdir(struct file *file, struct dir_context *ctx)
1210 {
1211     struct dentry   *dentry = file_dentry(file);
1212     struct inode    *inode = d_inode(dentry);
1213     struct nfs_inode *nfsi = NFS_I(inode);
1214     struct nfs_open_dir_context *dir_ctx = file->private_data;
1215     struct nfs_readdir_descriptor *desc;
1216     unsigned int cache_hits, cache_misses;
1217     bool force_clear;
1218     int res;
1219 
1220     dfprintk(FILE, "NFS: readdir(%pD2) starting at cookie %llu\n",
1221             file, (long long)ctx->pos);
1222     nfs_inc_stats(inode, NFSIOS_VFSGETDENTS);
1223 
1224     /*
1225      * ctx->pos points to the dirent entry number.
1226      * *desc->dir_cookie has the cookie for the next entry. We have
1227      * to either find the entry with the appropriate number or
1228      * revalidate the cookie.
1229      */
1230     nfs_revalidate_mapping(inode, file->f_mapping);
1231 
1232     res = -ENOMEM;
1233     desc = kzalloc(sizeof(*desc), GFP_KERNEL);
1234     if (!desc)
1235         goto out;
1236     desc->file = file;
1237     desc->ctx = ctx;
1238     desc->page_index_max = -1;
1239 
1240     spin_lock(&file->f_lock);
1241     desc->dir_cookie = dir_ctx->dir_cookie;
1242     desc->page_index = dir_ctx->page_index;
1243     desc->last_cookie = dir_ctx->last_cookie;
1244     desc->attr_gencount = dir_ctx->attr_gencount;
1245     desc->eof = dir_ctx->eof;
1246     nfs_set_dtsize(desc, dir_ctx->dtsize);
1247     memcpy(desc->verf, dir_ctx->verf, sizeof(desc->verf));
1248     cache_hits = atomic_xchg(&dir_ctx->cache_hits, 0);
1249     cache_misses = atomic_xchg(&dir_ctx->cache_misses, 0);
1250     force_clear = dir_ctx->force_clear;
1251     spin_unlock(&file->f_lock);
1252 
1253     if (desc->eof) {
1254         res = 0;
1255         goto out_free;
1256     }
1257 
1258     desc->plus = nfs_use_readdirplus(inode, ctx, cache_hits, cache_misses);
1259     force_clear = nfs_readdir_handle_cache_misses(inode, desc, cache_misses,
1260                               force_clear);
1261     desc->clear_cache = force_clear;
1262 
1263     do {
1264         res = readdir_search_pagecache(desc);
1265 
1266         if (res == -EBADCOOKIE) {
1267             res = 0;
1268             /* This means either end of directory */
1269             if (desc->dir_cookie && !desc->eof) {
1270                 /* Or that the server has 'lost' a cookie */
1271                 res = uncached_readdir(desc);
1272                 if (res == 0)
1273                     continue;
1274                 if (res == -EBADCOOKIE || res == -ENOTSYNC)
1275                     res = 0;
1276             }
1277             break;
1278         }
1279         if (res == -ETOOSMALL && desc->plus) {
1280             nfs_zap_caches(inode);
1281             desc->plus = false;
1282             desc->eof = false;
1283             continue;
1284         }
1285         if (res < 0)
1286             break;
1287 
1288         nfs_do_filldir(desc, nfsi->cookieverf);
1289         nfs_readdir_page_unlock_and_put_cached(desc);
1290         if (desc->page_index == desc->page_index_max)
1291             desc->clear_cache = force_clear;
1292     } while (!desc->eob && !desc->eof);
1293 
1294     spin_lock(&file->f_lock);
1295     dir_ctx->dir_cookie = desc->dir_cookie;
1296     dir_ctx->last_cookie = desc->last_cookie;
1297     dir_ctx->attr_gencount = desc->attr_gencount;
1298     dir_ctx->page_index = desc->page_index;
1299     dir_ctx->force_clear = force_clear;
1300     dir_ctx->eof = desc->eof;
1301     dir_ctx->dtsize = desc->dtsize;
1302     memcpy(dir_ctx->verf, desc->verf, sizeof(dir_ctx->verf));
1303     spin_unlock(&file->f_lock);
1304 out_free:
1305     kfree(desc);
1306 
1307 out:
1308     dfprintk(FILE, "NFS: readdir(%pD2) returns %d\n", file, res);
1309     return res;
1310 }
1311 
1312 static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence)
1313 {
1314     struct nfs_open_dir_context *dir_ctx = filp->private_data;
1315 
1316     dfprintk(FILE, "NFS: llseek dir(%pD2, %lld, %d)\n",
1317             filp, offset, whence);
1318 
1319     switch (whence) {
1320     default:
1321         return -EINVAL;
1322     case SEEK_SET:
1323         if (offset < 0)
1324             return -EINVAL;
1325         spin_lock(&filp->f_lock);
1326         break;
1327     case SEEK_CUR:
1328         if (offset == 0)
1329             return filp->f_pos;
1330         spin_lock(&filp->f_lock);
1331         offset += filp->f_pos;
1332         if (offset < 0) {
1333             spin_unlock(&filp->f_lock);
1334             return -EINVAL;
1335         }
1336     }
1337     if (offset != filp->f_pos) {
1338         filp->f_pos = offset;
1339         dir_ctx->page_index = 0;
1340         if (!nfs_readdir_use_cookie(filp)) {
1341             dir_ctx->dir_cookie = 0;
1342             dir_ctx->last_cookie = 0;
1343         } else {
1344             dir_ctx->dir_cookie = offset;
1345             dir_ctx->last_cookie = offset;
1346         }
1347         dir_ctx->eof = false;
1348     }
1349     spin_unlock(&filp->f_lock);
1350     return offset;
1351 }
1352 
1353 /*
1354  * All directory operations under NFS are synchronous, so fsync()
1355  * is a dummy operation.
1356  */
1357 static int nfs_fsync_dir(struct file *filp, loff_t start, loff_t end,
1358              int datasync)
1359 {
1360     dfprintk(FILE, "NFS: fsync dir(%pD2) datasync %d\n", filp, datasync);
1361 
1362     nfs_inc_stats(file_inode(filp), NFSIOS_VFSFSYNC);
1363     return 0;
1364 }
1365 
1366 /**
1367  * nfs_force_lookup_revalidate - Mark the directory as having changed
1368  * @dir: pointer to directory inode
1369  *
1370  * This forces the revalidation code in nfs_lookup_revalidate() to do a
1371  * full lookup on all child dentries of 'dir' whenever a change occurs
1372  * on the server that might have invalidated our dcache.
1373  *
1374  * Note that we reserve bit '0' as a tag to let us know when a dentry
1375  * was revalidated while holding a delegation on its inode.
1376  *
1377  * The caller should be holding dir->i_lock
1378  */
1379 void nfs_force_lookup_revalidate(struct inode *dir)
1380 {
1381     NFS_I(dir)->cache_change_attribute += 2;
1382 }
1383 EXPORT_SYMBOL_GPL(nfs_force_lookup_revalidate);
1384 
1385 /**
1386  * nfs_verify_change_attribute - Detects NFS remote directory changes
1387  * @dir: pointer to parent directory inode
1388  * @verf: previously saved change attribute
1389  *
1390  * Return "false" if the verifiers doesn't match the change attribute.
1391  * This would usually indicate that the directory contents have changed on
1392  * the server, and that any dentries need revalidating.
1393  */
1394 static bool nfs_verify_change_attribute(struct inode *dir, unsigned long verf)
1395 {
1396     return (verf & ~1UL) == nfs_save_change_attribute(dir);
1397 }
1398 
1399 static void nfs_set_verifier_delegated(unsigned long *verf)
1400 {
1401     *verf |= 1UL;
1402 }
1403 
1404 #if IS_ENABLED(CONFIG_NFS_V4)
1405 static void nfs_unset_verifier_delegated(unsigned long *verf)
1406 {
1407     *verf &= ~1UL;
1408 }
1409 #endif /* IS_ENABLED(CONFIG_NFS_V4) */
1410 
1411 static bool nfs_test_verifier_delegated(unsigned long verf)
1412 {
1413     return verf & 1;
1414 }
1415 
1416 static bool nfs_verifier_is_delegated(struct dentry *dentry)
1417 {
1418     return nfs_test_verifier_delegated(dentry->d_time);
1419 }
1420 
1421 static void nfs_set_verifier_locked(struct dentry *dentry, unsigned long verf)
1422 {
1423     struct inode *inode = d_inode(dentry);
1424     struct inode *dir = d_inode(dentry->d_parent);
1425 
1426     if (!nfs_verify_change_attribute(dir, verf))
1427         return;
1428     if (inode && NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
1429         nfs_set_verifier_delegated(&verf);
1430     dentry->d_time = verf;
1431 }
1432 
1433 /**
1434  * nfs_set_verifier - save a parent directory verifier in the dentry
1435  * @dentry: pointer to dentry
1436  * @verf: verifier to save
1437  *
1438  * Saves the parent directory verifier in @dentry. If the inode has
1439  * a delegation, we also tag the dentry as having been revalidated
1440  * while holding a delegation so that we know we don't have to
1441  * look it up again after a directory change.
1442  */
1443 void nfs_set_verifier(struct dentry *dentry, unsigned long verf)
1444 {
1445 
1446     spin_lock(&dentry->d_lock);
1447     nfs_set_verifier_locked(dentry, verf);
1448     spin_unlock(&dentry->d_lock);
1449 }
1450 EXPORT_SYMBOL_GPL(nfs_set_verifier);
1451 
1452 #if IS_ENABLED(CONFIG_NFS_V4)
1453 /**
1454  * nfs_clear_verifier_delegated - clear the dir verifier delegation tag
1455  * @inode: pointer to inode
1456  *
1457  * Iterates through the dentries in the inode alias list and clears
1458  * the tag used to indicate that the dentry has been revalidated
1459  * while holding a delegation.
1460  * This function is intended for use when the delegation is being
1461  * returned or revoked.
1462  */
1463 void nfs_clear_verifier_delegated(struct inode *inode)
1464 {
1465     struct dentry *alias;
1466 
1467     if (!inode)
1468         return;
1469     spin_lock(&inode->i_lock);
1470     hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) {
1471         spin_lock(&alias->d_lock);
1472         nfs_unset_verifier_delegated(&alias->d_time);
1473         spin_unlock(&alias->d_lock);
1474     }
1475     spin_unlock(&inode->i_lock);
1476 }
1477 EXPORT_SYMBOL_GPL(nfs_clear_verifier_delegated);
1478 #endif /* IS_ENABLED(CONFIG_NFS_V4) */
1479 
1480 static int nfs_dentry_verify_change(struct inode *dir, struct dentry *dentry)
1481 {
1482     if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE) &&
1483         d_really_is_negative(dentry))
1484         return dentry->d_time == inode_peek_iversion_raw(dir);
1485     return nfs_verify_change_attribute(dir, dentry->d_time);
1486 }
1487 
1488 /*
1489  * A check for whether or not the parent directory has changed.
1490  * In the case it has, we assume that the dentries are untrustworthy
1491  * and may need to be looked up again.
1492  * If rcu_walk prevents us from performing a full check, return 0.
1493  */
1494 static int nfs_check_verifier(struct inode *dir, struct dentry *dentry,
1495                   int rcu_walk)
1496 {
1497     if (IS_ROOT(dentry))
1498         return 1;
1499     if (NFS_SERVER(dir)->flags & NFS_MOUNT_LOOKUP_CACHE_NONE)
1500         return 0;
1501     if (!nfs_dentry_verify_change(dir, dentry))
1502         return 0;
1503     /* Revalidate nfsi->cache_change_attribute before we declare a match */
1504     if (nfs_mapping_need_revalidate_inode(dir)) {
1505         if (rcu_walk)
1506             return 0;
1507         if (__nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0)
1508             return 0;
1509     }
1510     if (!nfs_dentry_verify_change(dir, dentry))
1511         return 0;
1512     return 1;
1513 }
1514 
1515 /*
1516  * Use intent information to check whether or not we're going to do
1517  * an O_EXCL create using this path component.
1518  */
1519 static int nfs_is_exclusive_create(struct inode *dir, unsigned int flags)
1520 {
1521     if (NFS_PROTO(dir)->version == 2)
1522         return 0;
1523     return flags & LOOKUP_EXCL;
1524 }
1525 
1526 /*
1527  * Inode and filehandle revalidation for lookups.
1528  *
1529  * We force revalidation in the cases where the VFS sets LOOKUP_REVAL,
1530  * or if the intent information indicates that we're about to open this
1531  * particular file and the "nocto" mount flag is not set.
1532  *
1533  */
1534 static
1535 int nfs_lookup_verify_inode(struct inode *inode, unsigned int flags)
1536 {
1537     struct nfs_server *server = NFS_SERVER(inode);
1538     int ret;
1539 
1540     if (IS_AUTOMOUNT(inode))
1541         return 0;
1542 
1543     if (flags & LOOKUP_OPEN) {
1544         switch (inode->i_mode & S_IFMT) {
1545         case S_IFREG:
1546             /* A NFSv4 OPEN will revalidate later */
1547             if (server->caps & NFS_CAP_ATOMIC_OPEN)
1548                 goto out;
1549             fallthrough;
1550         case S_IFDIR:
1551             if (server->flags & NFS_MOUNT_NOCTO)
1552                 break;
1553             /* NFS close-to-open cache consistency validation */
1554             goto out_force;
1555         }
1556     }
1557 
1558     /* VFS wants an on-the-wire revalidation */
1559     if (flags & LOOKUP_REVAL)
1560         goto out_force;
1561 out:
1562     if (inode->i_nlink > 0 ||
1563         (inode->i_nlink == 0 &&
1564          test_bit(NFS_INO_PRESERVE_UNLINKED, &NFS_I(inode)->flags)))
1565         return 0;
1566     else
1567         return -ESTALE;
1568 out_force:
1569     if (flags & LOOKUP_RCU)
1570         return -ECHILD;
1571     ret = __nfs_revalidate_inode(server, inode);
1572     if (ret != 0)
1573         return ret;
1574     goto out;
1575 }
1576 
1577 static void nfs_mark_dir_for_revalidate(struct inode *inode)
1578 {
1579     spin_lock(&inode->i_lock);
1580     nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE);
1581     spin_unlock(&inode->i_lock);
1582 }
1583 
1584 /*
1585  * We judge how long we want to trust negative
1586  * dentries by looking at the parent inode mtime.
1587  *
1588  * If parent mtime has changed, we revalidate, else we wait for a
1589  * period corresponding to the parent's attribute cache timeout value.
1590  *
1591  * If LOOKUP_RCU prevents us from performing a full check, return 1
1592  * suggesting a reval is needed.
1593  *
1594  * Note that when creating a new file, or looking up a rename target,
1595  * then it shouldn't be necessary to revalidate a negative dentry.
1596  */
1597 static inline
1598 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry,
1599                unsigned int flags)
1600 {
1601     if (flags & (LOOKUP_CREATE | LOOKUP_RENAME_TARGET))
1602         return 0;
1603     if (NFS_SERVER(dir)->flags & NFS_MOUNT_LOOKUP_CACHE_NONEG)
1604         return 1;
1605     /* Case insensitive server? Revalidate negative dentries */
1606     if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE))
1607         return 1;
1608     return !nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU);
1609 }
1610 
1611 static int
1612 nfs_lookup_revalidate_done(struct inode *dir, struct dentry *dentry,
1613                struct inode *inode, int error)
1614 {
1615     switch (error) {
1616     case 1:
1617         break;
1618     case 0:
1619         /*
1620          * We can't d_drop the root of a disconnected tree:
1621          * its d_hash is on the s_anon list and d_drop() would hide
1622          * it from shrink_dcache_for_unmount(), leading to busy
1623          * inodes on unmount and further oopses.
1624          */
1625         if (inode && IS_ROOT(dentry))
1626             error = 1;
1627         break;
1628     }
1629     trace_nfs_lookup_revalidate_exit(dir, dentry, 0, error);
1630     return error;
1631 }
1632 
1633 static int
1634 nfs_lookup_revalidate_negative(struct inode *dir, struct dentry *dentry,
1635                    unsigned int flags)
1636 {
1637     int ret = 1;
1638     if (nfs_neg_need_reval(dir, dentry, flags)) {
1639         if (flags & LOOKUP_RCU)
1640             return -ECHILD;
1641         ret = 0;
1642     }
1643     return nfs_lookup_revalidate_done(dir, dentry, NULL, ret);
1644 }
1645 
1646 static int
1647 nfs_lookup_revalidate_delegated(struct inode *dir, struct dentry *dentry,
1648                 struct inode *inode)
1649 {
1650     nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
1651     return nfs_lookup_revalidate_done(dir, dentry, inode, 1);
1652 }
1653 
1654 static int nfs_lookup_revalidate_dentry(struct inode *dir,
1655                     struct dentry *dentry,
1656                     struct inode *inode, unsigned int flags)
1657 {
1658     struct nfs_fh *fhandle;
1659     struct nfs_fattr *fattr;
1660     unsigned long dir_verifier;
1661     int ret;
1662 
1663     trace_nfs_lookup_revalidate_enter(dir, dentry, flags);
1664 
1665     ret = -ENOMEM;
1666     fhandle = nfs_alloc_fhandle();
1667     fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
1668     if (fhandle == NULL || fattr == NULL)
1669         goto out;
1670 
1671     dir_verifier = nfs_save_change_attribute(dir);
1672     ret = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr);
1673     if (ret < 0) {
1674         switch (ret) {
1675         case -ESTALE:
1676         case -ENOENT:
1677             ret = 0;
1678             break;
1679         case -ETIMEDOUT:
1680             if (NFS_SERVER(inode)->flags & NFS_MOUNT_SOFTREVAL)
1681                 ret = 1;
1682         }
1683         goto out;
1684     }
1685 
1686     /* Request help from readdirplus */
1687     nfs_lookup_advise_force_readdirplus(dir, flags);
1688 
1689     ret = 0;
1690     if (nfs_compare_fh(NFS_FH(inode), fhandle))
1691         goto out;
1692     if (nfs_refresh_inode(inode, fattr) < 0)
1693         goto out;
1694 
1695     nfs_setsecurity(inode, fattr);
1696     nfs_set_verifier(dentry, dir_verifier);
1697 
1698     ret = 1;
1699 out:
1700     nfs_free_fattr(fattr);
1701     nfs_free_fhandle(fhandle);
1702 
1703     /*
1704      * If the lookup failed despite the dentry change attribute being
1705      * a match, then we should revalidate the directory cache.
1706      */
1707     if (!ret && nfs_dentry_verify_change(dir, dentry))
1708         nfs_mark_dir_for_revalidate(dir);
1709     return nfs_lookup_revalidate_done(dir, dentry, inode, ret);
1710 }
1711 
1712 /*
1713  * This is called every time the dcache has a lookup hit,
1714  * and we should check whether we can really trust that
1715  * lookup.
1716  *
1717  * NOTE! The hit can be a negative hit too, don't assume
1718  * we have an inode!
1719  *
1720  * If the parent directory is seen to have changed, we throw out the
1721  * cached dentry and do a new lookup.
1722  */
1723 static int
1724 nfs_do_lookup_revalidate(struct inode *dir, struct dentry *dentry,
1725              unsigned int flags)
1726 {
1727     struct inode *inode;
1728     int error;
1729 
1730     nfs_inc_stats(dir, NFSIOS_DENTRYREVALIDATE);
1731     inode = d_inode(dentry);
1732 
1733     if (!inode)
1734         return nfs_lookup_revalidate_negative(dir, dentry, flags);
1735 
1736     if (is_bad_inode(inode)) {
1737         dfprintk(LOOKUPCACHE, "%s: %pd2 has dud inode\n",
1738                 __func__, dentry);
1739         goto out_bad;
1740     }
1741 
1742     if ((flags & LOOKUP_RENAME_TARGET) && d_count(dentry) < 2 &&
1743         nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE))
1744         goto out_bad;
1745 
1746     if (nfs_verifier_is_delegated(dentry))
1747         return nfs_lookup_revalidate_delegated(dir, dentry, inode);
1748 
1749     /* Force a full look up iff the parent directory has changed */
1750     if (!(flags & (LOOKUP_EXCL | LOOKUP_REVAL)) &&
1751         nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) {
1752         error = nfs_lookup_verify_inode(inode, flags);
1753         if (error) {
1754             if (error == -ESTALE)
1755                 nfs_mark_dir_for_revalidate(dir);
1756             goto out_bad;
1757         }
1758         goto out_valid;
1759     }
1760 
1761     if (flags & LOOKUP_RCU)
1762         return -ECHILD;
1763 
1764     if (NFS_STALE(inode))
1765         goto out_bad;
1766 
1767     return nfs_lookup_revalidate_dentry(dir, dentry, inode, flags);
1768 out_valid:
1769     return nfs_lookup_revalidate_done(dir, dentry, inode, 1);
1770 out_bad:
1771     if (flags & LOOKUP_RCU)
1772         return -ECHILD;
1773     return nfs_lookup_revalidate_done(dir, dentry, inode, 0);
1774 }
1775 
1776 static int
1777 __nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags,
1778             int (*reval)(struct inode *, struct dentry *, unsigned int))
1779 {
1780     struct dentry *parent;
1781     struct inode *dir;
1782     int ret;
1783 
1784     if (flags & LOOKUP_RCU) {
1785         if (dentry->d_fsdata == NFS_FSDATA_BLOCKED)
1786             return -ECHILD;
1787         parent = READ_ONCE(dentry->d_parent);
1788         dir = d_inode_rcu(parent);
1789         if (!dir)
1790             return -ECHILD;
1791         ret = reval(dir, dentry, flags);
1792         if (parent != READ_ONCE(dentry->d_parent))
1793             return -ECHILD;
1794     } else {
1795         /* Wait for unlink to complete */
1796         wait_var_event(&dentry->d_fsdata,
1797                    dentry->d_fsdata != NFS_FSDATA_BLOCKED);
1798         parent = dget_parent(dentry);
1799         ret = reval(d_inode(parent), dentry, flags);
1800         dput(parent);
1801     }
1802     return ret;
1803 }
1804 
1805 static int nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags)
1806 {
1807     return __nfs_lookup_revalidate(dentry, flags, nfs_do_lookup_revalidate);
1808 }
1809 
1810 /*
1811  * A weaker form of d_revalidate for revalidating just the d_inode(dentry)
1812  * when we don't really care about the dentry name. This is called when a
1813  * pathwalk ends on a dentry that was not found via a normal lookup in the
1814  * parent dir (e.g.: ".", "..", procfs symlinks or mountpoint traversals).
1815  *
1816  * In this situation, we just want to verify that the inode itself is OK
1817  * since the dentry might have changed on the server.
1818  */
1819 static int nfs_weak_revalidate(struct dentry *dentry, unsigned int flags)
1820 {
1821     struct inode *inode = d_inode(dentry);
1822     int error = 0;
1823 
1824     /*
1825      * I believe we can only get a negative dentry here in the case of a
1826      * procfs-style symlink. Just assume it's correct for now, but we may
1827      * eventually need to do something more here.
1828      */
1829     if (!inode) {
1830         dfprintk(LOOKUPCACHE, "%s: %pd2 has negative inode\n",
1831                 __func__, dentry);
1832         return 1;
1833     }
1834 
1835     if (is_bad_inode(inode)) {
1836         dfprintk(LOOKUPCACHE, "%s: %pd2 has dud inode\n",
1837                 __func__, dentry);
1838         return 0;
1839     }
1840 
1841     error = nfs_lookup_verify_inode(inode, flags);
1842     dfprintk(LOOKUPCACHE, "NFS: %s: inode %lu is %s\n",
1843             __func__, inode->i_ino, error ? "invalid" : "valid");
1844     return !error;
1845 }
1846 
1847 /*
1848  * This is called from dput() when d_count is going to 0.
1849  */
1850 static int nfs_dentry_delete(const struct dentry *dentry)
1851 {
1852     dfprintk(VFS, "NFS: dentry_delete(%pd2, %x)\n",
1853         dentry, dentry->d_flags);
1854 
1855     /* Unhash any dentry with a stale inode */
1856     if (d_really_is_positive(dentry) && NFS_STALE(d_inode(dentry)))
1857         return 1;
1858 
1859     if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
1860         /* Unhash it, so that ->d_iput() would be called */
1861         return 1;
1862     }
1863     if (!(dentry->d_sb->s_flags & SB_ACTIVE)) {
1864         /* Unhash it, so that ancestors of killed async unlink
1865          * files will be cleaned up during umount */
1866         return 1;
1867     }
1868     return 0;
1869 
1870 }
1871 
1872 /* Ensure that we revalidate inode->i_nlink */
1873 static void nfs_drop_nlink(struct inode *inode)
1874 {
1875     spin_lock(&inode->i_lock);
1876     /* drop the inode if we're reasonably sure this is the last link */
1877     if (inode->i_nlink > 0)
1878         drop_nlink(inode);
1879     NFS_I(inode)->attr_gencount = nfs_inc_attr_generation_counter();
1880     nfs_set_cache_invalid(
1881         inode, NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME |
1882                    NFS_INO_INVALID_NLINK);
1883     spin_unlock(&inode->i_lock);
1884 }
1885 
1886 /*
1887  * Called when the dentry loses inode.
1888  * We use it to clean up silly-renamed files.
1889  */
1890 static void nfs_dentry_iput(struct dentry *dentry, struct inode *inode)
1891 {
1892     if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
1893         nfs_complete_unlink(dentry, inode);
1894         nfs_drop_nlink(inode);
1895     }
1896     iput(inode);
1897 }
1898 
1899 static void nfs_d_release(struct dentry *dentry)
1900 {
1901     /* free cached devname value, if it survived that far */
1902     if (unlikely(dentry->d_fsdata)) {
1903         if (dentry->d_flags & DCACHE_NFSFS_RENAMED)
1904             WARN_ON(1);
1905         else
1906             kfree(dentry->d_fsdata);
1907     }
1908 }
1909 
1910 const struct dentry_operations nfs_dentry_operations = {
1911     .d_revalidate   = nfs_lookup_revalidate,
1912     .d_weak_revalidate  = nfs_weak_revalidate,
1913     .d_delete   = nfs_dentry_delete,
1914     .d_iput     = nfs_dentry_iput,
1915     .d_automount    = nfs_d_automount,
1916     .d_release  = nfs_d_release,
1917 };
1918 EXPORT_SYMBOL_GPL(nfs_dentry_operations);
1919 
1920 struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags)
1921 {
1922     struct dentry *res;
1923     struct inode *inode = NULL;
1924     struct nfs_fh *fhandle = NULL;
1925     struct nfs_fattr *fattr = NULL;
1926     unsigned long dir_verifier;
1927     int error;
1928 
1929     dfprintk(VFS, "NFS: lookup(%pd2)\n", dentry);
1930     nfs_inc_stats(dir, NFSIOS_VFSLOOKUP);
1931 
1932     if (unlikely(dentry->d_name.len > NFS_SERVER(dir)->namelen))
1933         return ERR_PTR(-ENAMETOOLONG);
1934 
1935     /*
1936      * If we're doing an exclusive create, optimize away the lookup
1937      * but don't hash the dentry.
1938      */
1939     if (nfs_is_exclusive_create(dir, flags) || flags & LOOKUP_RENAME_TARGET)
1940         return NULL;
1941 
1942     res = ERR_PTR(-ENOMEM);
1943     fhandle = nfs_alloc_fhandle();
1944     fattr = nfs_alloc_fattr_with_label(NFS_SERVER(dir));
1945     if (fhandle == NULL || fattr == NULL)
1946         goto out;
1947 
1948     dir_verifier = nfs_save_change_attribute(dir);
1949     trace_nfs_lookup_enter(dir, dentry, flags);
1950     error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr);
1951     if (error == -ENOENT) {
1952         if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE))
1953             dir_verifier = inode_peek_iversion_raw(dir);
1954         goto no_entry;
1955     }
1956     if (error < 0) {
1957         res = ERR_PTR(error);
1958         goto out;
1959     }
1960     inode = nfs_fhget(dentry->d_sb, fhandle, fattr);
1961     res = ERR_CAST(inode);
1962     if (IS_ERR(res))
1963         goto out;
1964 
1965     /* Notify readdir to use READDIRPLUS */
1966     nfs_lookup_advise_force_readdirplus(dir, flags);
1967 
1968 no_entry:
1969     res = d_splice_alias(inode, dentry);
1970     if (res != NULL) {
1971         if (IS_ERR(res))
1972             goto out;
1973         dentry = res;
1974     }
1975     nfs_set_verifier(dentry, dir_verifier);
1976 out:
1977     trace_nfs_lookup_exit(dir, dentry, flags, PTR_ERR_OR_ZERO(res));
1978     nfs_free_fattr(fattr);
1979     nfs_free_fhandle(fhandle);
1980     return res;
1981 }
1982 EXPORT_SYMBOL_GPL(nfs_lookup);
1983 
1984 void nfs_d_prune_case_insensitive_aliases(struct inode *inode)
1985 {
1986     /* Case insensitive server? Revalidate dentries */
1987     if (inode && nfs_server_capable(inode, NFS_CAP_CASE_INSENSITIVE))
1988         d_prune_aliases(inode);
1989 }
1990 EXPORT_SYMBOL_GPL(nfs_d_prune_case_insensitive_aliases);
1991 
1992 #if IS_ENABLED(CONFIG_NFS_V4)
1993 static int nfs4_lookup_revalidate(struct dentry *, unsigned int);
1994 
1995 const struct dentry_operations nfs4_dentry_operations = {
1996     .d_revalidate   = nfs4_lookup_revalidate,
1997     .d_weak_revalidate  = nfs_weak_revalidate,
1998     .d_delete   = nfs_dentry_delete,
1999     .d_iput     = nfs_dentry_iput,
2000     .d_automount    = nfs_d_automount,
2001     .d_release  = nfs_d_release,
2002 };
2003 EXPORT_SYMBOL_GPL(nfs4_dentry_operations);
2004 
2005 static struct nfs_open_context *create_nfs_open_context(struct dentry *dentry, int open_flags, struct file *filp)
2006 {
2007     return alloc_nfs_open_context(dentry, flags_to_mode(open_flags), filp);
2008 }
2009 
2010 static int do_open(struct inode *inode, struct file *filp)
2011 {
2012     nfs_fscache_open_file(inode, filp);
2013     return 0;
2014 }
2015 
2016 static int nfs_finish_open(struct nfs_open_context *ctx,
2017                struct dentry *dentry,
2018                struct file *file, unsigned open_flags)
2019 {
2020     int err;
2021 
2022     err = finish_open(file, dentry, do_open);
2023     if (err)
2024         goto out;
2025     if (S_ISREG(file->f_path.dentry->d_inode->i_mode))
2026         nfs_file_set_open_context(file, ctx);
2027     else
2028         err = -EOPENSTALE;
2029 out:
2030     return err;
2031 }
2032 
2033 int nfs_atomic_open(struct inode *dir, struct dentry *dentry,
2034             struct file *file, unsigned open_flags,
2035             umode_t mode)
2036 {
2037     DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
2038     struct nfs_open_context *ctx;
2039     struct dentry *res;
2040     struct iattr attr = { .ia_valid = ATTR_OPEN };
2041     struct inode *inode;
2042     unsigned int lookup_flags = 0;
2043     unsigned long dir_verifier;
2044     bool switched = false;
2045     int created = 0;
2046     int err;
2047 
2048     /* Expect a negative dentry */
2049     BUG_ON(d_inode(dentry));
2050 
2051     dfprintk(VFS, "NFS: atomic_open(%s/%lu), %pd\n",
2052             dir->i_sb->s_id, dir->i_ino, dentry);
2053 
2054     err = nfs_check_flags(open_flags);
2055     if (err)
2056         return err;
2057 
2058     /* NFS only supports OPEN on regular files */
2059     if ((open_flags & O_DIRECTORY)) {
2060         if (!d_in_lookup(dentry)) {
2061             /*
2062              * Hashed negative dentry with O_DIRECTORY: dentry was
2063              * revalidated and is fine, no need to perform lookup
2064              * again
2065              */
2066             return -ENOENT;
2067         }
2068         lookup_flags = LOOKUP_OPEN|LOOKUP_DIRECTORY;
2069         goto no_open;
2070     }
2071 
2072     if (dentry->d_name.len > NFS_SERVER(dir)->namelen)
2073         return -ENAMETOOLONG;
2074 
2075     if (open_flags & O_CREAT) {
2076         struct nfs_server *server = NFS_SERVER(dir);
2077 
2078         if (!(server->attr_bitmask[2] & FATTR4_WORD2_MODE_UMASK))
2079             mode &= ~current_umask();
2080 
2081         attr.ia_valid |= ATTR_MODE;
2082         attr.ia_mode = mode;
2083     }
2084     if (open_flags & O_TRUNC) {
2085         attr.ia_valid |= ATTR_SIZE;
2086         attr.ia_size = 0;
2087     }
2088 
2089     if (!(open_flags & O_CREAT) && !d_in_lookup(dentry)) {
2090         d_drop(dentry);
2091         switched = true;
2092         dentry = d_alloc_parallel(dentry->d_parent,
2093                       &dentry->d_name, &wq);
2094         if (IS_ERR(dentry))
2095             return PTR_ERR(dentry);
2096         if (unlikely(!d_in_lookup(dentry)))
2097             return finish_no_open(file, dentry);
2098     }
2099 
2100     ctx = create_nfs_open_context(dentry, open_flags, file);
2101     err = PTR_ERR(ctx);
2102     if (IS_ERR(ctx))
2103         goto out;
2104 
2105     trace_nfs_atomic_open_enter(dir, ctx, open_flags);
2106     inode = NFS_PROTO(dir)->open_context(dir, ctx, open_flags, &attr, &created);
2107     if (created)
2108         file->f_mode |= FMODE_CREATED;
2109     if (IS_ERR(inode)) {
2110         err = PTR_ERR(inode);
2111         trace_nfs_atomic_open_exit(dir, ctx, open_flags, err);
2112         put_nfs_open_context(ctx);
2113         d_drop(dentry);
2114         switch (err) {
2115         case -ENOENT:
2116             d_splice_alias(NULL, dentry);
2117             if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE))
2118                 dir_verifier = inode_peek_iversion_raw(dir);
2119             else
2120                 dir_verifier = nfs_save_change_attribute(dir);
2121             nfs_set_verifier(dentry, dir_verifier);
2122             break;
2123         case -EISDIR:
2124         case -ENOTDIR:
2125             goto no_open;
2126         case -ELOOP:
2127             if (!(open_flags & O_NOFOLLOW))
2128                 goto no_open;
2129             break;
2130             /* case -EINVAL: */
2131         default:
2132             break;
2133         }
2134         goto out;
2135     }
2136     file->f_mode |= FMODE_CAN_ODIRECT;
2137 
2138     err = nfs_finish_open(ctx, ctx->dentry, file, open_flags);
2139     trace_nfs_atomic_open_exit(dir, ctx, open_flags, err);
2140     put_nfs_open_context(ctx);
2141 out:
2142     if (unlikely(switched)) {
2143         d_lookup_done(dentry);
2144         dput(dentry);
2145     }
2146     return err;
2147 
2148 no_open:
2149     res = nfs_lookup(dir, dentry, lookup_flags);
2150     if (!res) {
2151         inode = d_inode(dentry);
2152         if ((lookup_flags & LOOKUP_DIRECTORY) && inode &&
2153             !(S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)))
2154             res = ERR_PTR(-ENOTDIR);
2155         else if (inode && S_ISREG(inode->i_mode))
2156             res = ERR_PTR(-EOPENSTALE);
2157     } else if (!IS_ERR(res)) {
2158         inode = d_inode(res);
2159         if ((lookup_flags & LOOKUP_DIRECTORY) && inode &&
2160             !(S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))) {
2161             dput(res);
2162             res = ERR_PTR(-ENOTDIR);
2163         } else if (inode && S_ISREG(inode->i_mode)) {
2164             dput(res);
2165             res = ERR_PTR(-EOPENSTALE);
2166         }
2167     }
2168     if (switched) {
2169         d_lookup_done(dentry);
2170         if (!res)
2171             res = dentry;
2172         else
2173             dput(dentry);
2174     }
2175     if (IS_ERR(res))
2176         return PTR_ERR(res);
2177     return finish_no_open(file, res);
2178 }
2179 EXPORT_SYMBOL_GPL(nfs_atomic_open);
2180 
2181 static int
2182 nfs4_do_lookup_revalidate(struct inode *dir, struct dentry *dentry,
2183               unsigned int flags)
2184 {
2185     struct inode *inode;
2186 
2187     if (!(flags & LOOKUP_OPEN) || (flags & LOOKUP_DIRECTORY))
2188         goto full_reval;
2189     if (d_mountpoint(dentry))
2190         goto full_reval;
2191 
2192     inode = d_inode(dentry);
2193 
2194     /* We can't create new files in nfs_open_revalidate(), so we
2195      * optimize away revalidation of negative dentries.
2196      */
2197     if (inode == NULL)
2198         goto full_reval;
2199 
2200     if (nfs_verifier_is_delegated(dentry))
2201         return nfs_lookup_revalidate_delegated(dir, dentry, inode);
2202 
2203     /* NFS only supports OPEN on regular files */
2204     if (!S_ISREG(inode->i_mode))
2205         goto full_reval;
2206 
2207     /* We cannot do exclusive creation on a positive dentry */
2208     if (flags & (LOOKUP_EXCL | LOOKUP_REVAL))
2209         goto reval_dentry;
2210 
2211     /* Check if the directory changed */
2212     if (!nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU))
2213         goto reval_dentry;
2214 
2215     /* Let f_op->open() actually open (and revalidate) the file */
2216     return 1;
2217 reval_dentry:
2218     if (flags & LOOKUP_RCU)
2219         return -ECHILD;
2220     return nfs_lookup_revalidate_dentry(dir, dentry, inode, flags);
2221 
2222 full_reval:
2223     return nfs_do_lookup_revalidate(dir, dentry, flags);
2224 }
2225 
2226 static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags)
2227 {
2228     return __nfs_lookup_revalidate(dentry, flags,
2229             nfs4_do_lookup_revalidate);
2230 }
2231 
2232 #endif /* CONFIG_NFSV4 */
2233 
2234 struct dentry *
2235 nfs_add_or_obtain(struct dentry *dentry, struct nfs_fh *fhandle,
2236                 struct nfs_fattr *fattr)
2237 {
2238     struct dentry *parent = dget_parent(dentry);
2239     struct inode *dir = d_inode(parent);
2240     struct inode *inode;
2241     struct dentry *d;
2242     int error;
2243 
2244     d_drop(dentry);
2245 
2246     if (fhandle->size == 0) {
2247         error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr);
2248         if (error)
2249             goto out_error;
2250     }
2251     nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
2252     if (!(fattr->valid & NFS_ATTR_FATTR)) {
2253         struct nfs_server *server = NFS_SB(dentry->d_sb);
2254         error = server->nfs_client->rpc_ops->getattr(server, fhandle,
2255                 fattr, NULL);
2256         if (error < 0)
2257             goto out_error;
2258     }
2259     inode = nfs_fhget(dentry->d_sb, fhandle, fattr);
2260     d = d_splice_alias(inode, dentry);
2261 out:
2262     dput(parent);
2263     return d;
2264 out_error:
2265     d = ERR_PTR(error);
2266     goto out;
2267 }
2268 EXPORT_SYMBOL_GPL(nfs_add_or_obtain);
2269 
2270 /*
2271  * Code common to create, mkdir, and mknod.
2272  */
2273 int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle,
2274                 struct nfs_fattr *fattr)
2275 {
2276     struct dentry *d;
2277 
2278     d = nfs_add_or_obtain(dentry, fhandle, fattr);
2279     if (IS_ERR(d))
2280         return PTR_ERR(d);
2281 
2282     /* Callers don't care */
2283     dput(d);
2284     return 0;
2285 }
2286 EXPORT_SYMBOL_GPL(nfs_instantiate);
2287 
2288 /*
2289  * Following a failed create operation, we drop the dentry rather
2290  * than retain a negative dentry. This avoids a problem in the event
2291  * that the operation succeeded on the server, but an error in the
2292  * reply path made it appear to have failed.
2293  */
2294 int nfs_create(struct user_namespace *mnt_userns, struct inode *dir,
2295            struct dentry *dentry, umode_t mode, bool excl)
2296 {
2297     struct iattr attr;
2298     int open_flags = excl ? O_CREAT | O_EXCL : O_CREAT;
2299     int error;
2300 
2301     dfprintk(VFS, "NFS: create(%s/%lu), %pd\n",
2302             dir->i_sb->s_id, dir->i_ino, dentry);
2303 
2304     attr.ia_mode = mode;
2305     attr.ia_valid = ATTR_MODE;
2306 
2307     trace_nfs_create_enter(dir, dentry, open_flags);
2308     error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags);
2309     trace_nfs_create_exit(dir, dentry, open_flags, error);
2310     if (error != 0)
2311         goto out_err;
2312     return 0;
2313 out_err:
2314     d_drop(dentry);
2315     return error;
2316 }
2317 EXPORT_SYMBOL_GPL(nfs_create);
2318 
2319 /*
2320  * See comments for nfs_proc_create regarding failed operations.
2321  */
2322 int
2323 nfs_mknod(struct user_namespace *mnt_userns, struct inode *dir,
2324       struct dentry *dentry, umode_t mode, dev_t rdev)
2325 {
2326     struct iattr attr;
2327     int status;
2328 
2329     dfprintk(VFS, "NFS: mknod(%s/%lu), %pd\n",
2330             dir->i_sb->s_id, dir->i_ino, dentry);
2331 
2332     attr.ia_mode = mode;
2333     attr.ia_valid = ATTR_MODE;
2334 
2335     trace_nfs_mknod_enter(dir, dentry);
2336     status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev);
2337     trace_nfs_mknod_exit(dir, dentry, status);
2338     if (status != 0)
2339         goto out_err;
2340     return 0;
2341 out_err:
2342     d_drop(dentry);
2343     return status;
2344 }
2345 EXPORT_SYMBOL_GPL(nfs_mknod);
2346 
2347 /*
2348  * See comments for nfs_proc_create regarding failed operations.
2349  */
2350 int nfs_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
2351           struct dentry *dentry, umode_t mode)
2352 {
2353     struct iattr attr;
2354     int error;
2355 
2356     dfprintk(VFS, "NFS: mkdir(%s/%lu), %pd\n",
2357             dir->i_sb->s_id, dir->i_ino, dentry);
2358 
2359     attr.ia_valid = ATTR_MODE;
2360     attr.ia_mode = mode | S_IFDIR;
2361 
2362     trace_nfs_mkdir_enter(dir, dentry);
2363     error = NFS_PROTO(dir)->mkdir(dir, dentry, &attr);
2364     trace_nfs_mkdir_exit(dir, dentry, error);
2365     if (error != 0)
2366         goto out_err;
2367     return 0;
2368 out_err:
2369     d_drop(dentry);
2370     return error;
2371 }
2372 EXPORT_SYMBOL_GPL(nfs_mkdir);
2373 
2374 static void nfs_dentry_handle_enoent(struct dentry *dentry)
2375 {
2376     if (simple_positive(dentry))
2377         d_delete(dentry);
2378 }
2379 
2380 static void nfs_dentry_remove_handle_error(struct inode *dir,
2381                        struct dentry *dentry, int error)
2382 {
2383     switch (error) {
2384     case -ENOENT:
2385         if (d_really_is_positive(dentry))
2386             d_delete(dentry);
2387         nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
2388         break;
2389     case 0:
2390         nfs_d_prune_case_insensitive_aliases(d_inode(dentry));
2391         nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
2392     }
2393 }
2394 
2395 int nfs_rmdir(struct inode *dir, struct dentry *dentry)
2396 {
2397     int error;
2398 
2399     dfprintk(VFS, "NFS: rmdir(%s/%lu), %pd\n",
2400             dir->i_sb->s_id, dir->i_ino, dentry);
2401 
2402     trace_nfs_rmdir_enter(dir, dentry);
2403     if (d_really_is_positive(dentry)) {
2404         down_write(&NFS_I(d_inode(dentry))->rmdir_sem);
2405         error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name);
2406         /* Ensure the VFS deletes this inode */
2407         switch (error) {
2408         case 0:
2409             clear_nlink(d_inode(dentry));
2410             break;
2411         case -ENOENT:
2412             nfs_dentry_handle_enoent(dentry);
2413         }
2414         up_write(&NFS_I(d_inode(dentry))->rmdir_sem);
2415     } else
2416         error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name);
2417     nfs_dentry_remove_handle_error(dir, dentry, error);
2418     trace_nfs_rmdir_exit(dir, dentry, error);
2419 
2420     return error;
2421 }
2422 EXPORT_SYMBOL_GPL(nfs_rmdir);
2423 
2424 /*
2425  * Remove a file after making sure there are no pending writes,
2426  * and after checking that the file has only one user. 
2427  *
2428  * We invalidate the attribute cache and free the inode prior to the operation
2429  * to avoid possible races if the server reuses the inode.
2430  */
2431 static int nfs_safe_remove(struct dentry *dentry)
2432 {
2433     struct inode *dir = d_inode(dentry->d_parent);
2434     struct inode *inode = d_inode(dentry);
2435     int error = -EBUSY;
2436         
2437     dfprintk(VFS, "NFS: safe_remove(%pd2)\n", dentry);
2438 
2439     /* If the dentry was sillyrenamed, we simply call d_delete() */
2440     if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
2441         error = 0;
2442         goto out;
2443     }
2444 
2445     trace_nfs_remove_enter(dir, dentry);
2446     if (inode != NULL) {
2447         error = NFS_PROTO(dir)->remove(dir, dentry);
2448         if (error == 0)
2449             nfs_drop_nlink(inode);
2450     } else
2451         error = NFS_PROTO(dir)->remove(dir, dentry);
2452     if (error == -ENOENT)
2453         nfs_dentry_handle_enoent(dentry);
2454     trace_nfs_remove_exit(dir, dentry, error);
2455 out:
2456     return error;
2457 }
2458 
2459 /*  We do silly rename. In case sillyrename() returns -EBUSY, the inode
2460  *  belongs to an active ".nfs..." file and we return -EBUSY.
2461  *
2462  *  If sillyrename() returns 0, we do nothing, otherwise we unlink.
2463  */
2464 int nfs_unlink(struct inode *dir, struct dentry *dentry)
2465 {
2466     int error;
2467 
2468     dfprintk(VFS, "NFS: unlink(%s/%lu, %pd)\n", dir->i_sb->s_id,
2469         dir->i_ino, dentry);
2470 
2471     trace_nfs_unlink_enter(dir, dentry);
2472     spin_lock(&dentry->d_lock);
2473     if (d_count(dentry) > 1 && !test_bit(NFS_INO_PRESERVE_UNLINKED,
2474                          &NFS_I(d_inode(dentry))->flags)) {
2475         spin_unlock(&dentry->d_lock);
2476         /* Start asynchronous writeout of the inode */
2477         write_inode_now(d_inode(dentry), 0);
2478         error = nfs_sillyrename(dir, dentry);
2479         goto out;
2480     }
2481     /* We must prevent any concurrent open until the unlink
2482      * completes.  ->d_revalidate will wait for ->d_fsdata
2483      * to clear.  We set it here to ensure no lookup succeeds until
2484      * the unlink is complete on the server.
2485      */
2486     error = -ETXTBSY;
2487     if (WARN_ON(dentry->d_flags & DCACHE_NFSFS_RENAMED) ||
2488         WARN_ON(dentry->d_fsdata == NFS_FSDATA_BLOCKED)) {
2489         spin_unlock(&dentry->d_lock);
2490         goto out;
2491     }
2492     if (dentry->d_fsdata)
2493         /* old devname */
2494         kfree(dentry->d_fsdata);
2495     dentry->d_fsdata = NFS_FSDATA_BLOCKED;
2496 
2497     spin_unlock(&dentry->d_lock);
2498     error = nfs_safe_remove(dentry);
2499     nfs_dentry_remove_handle_error(dir, dentry, error);
2500     dentry->d_fsdata = NULL;
2501     wake_up_var(&dentry->d_fsdata);
2502 out:
2503     trace_nfs_unlink_exit(dir, dentry, error);
2504     return error;
2505 }
2506 EXPORT_SYMBOL_GPL(nfs_unlink);
2507 
2508 /*
2509  * To create a symbolic link, most file systems instantiate a new inode,
2510  * add a page to it containing the path, then write it out to the disk
2511  * using prepare_write/commit_write.
2512  *
2513  * Unfortunately the NFS client can't create the in-core inode first
2514  * because it needs a file handle to create an in-core inode (see
2515  * fs/nfs/inode.c:nfs_fhget).  We only have a file handle *after* the
2516  * symlink request has completed on the server.
2517  *
2518  * So instead we allocate a raw page, copy the symname into it, then do
2519  * the SYMLINK request with the page as the buffer.  If it succeeds, we
2520  * now have a new file handle and can instantiate an in-core NFS inode
2521  * and move the raw page into its mapping.
2522  */
2523 int nfs_symlink(struct user_namespace *mnt_userns, struct inode *dir,
2524         struct dentry *dentry, const char *symname)
2525 {
2526     struct page *page;
2527     char *kaddr;
2528     struct iattr attr;
2529     unsigned int pathlen = strlen(symname);
2530     int error;
2531 
2532     dfprintk(VFS, "NFS: symlink(%s/%lu, %pd, %s)\n", dir->i_sb->s_id,
2533         dir->i_ino, dentry, symname);
2534 
2535     if (pathlen > PAGE_SIZE)
2536         return -ENAMETOOLONG;
2537 
2538     attr.ia_mode = S_IFLNK | S_IRWXUGO;
2539     attr.ia_valid = ATTR_MODE;
2540 
2541     page = alloc_page(GFP_USER);
2542     if (!page)
2543         return -ENOMEM;
2544 
2545     kaddr = page_address(page);
2546     memcpy(kaddr, symname, pathlen);
2547     if (pathlen < PAGE_SIZE)
2548         memset(kaddr + pathlen, 0, PAGE_SIZE - pathlen);
2549 
2550     trace_nfs_symlink_enter(dir, dentry);
2551     error = NFS_PROTO(dir)->symlink(dir, dentry, page, pathlen, &attr);
2552     trace_nfs_symlink_exit(dir, dentry, error);
2553     if (error != 0) {
2554         dfprintk(VFS, "NFS: symlink(%s/%lu, %pd, %s) error %d\n",
2555             dir->i_sb->s_id, dir->i_ino,
2556             dentry, symname, error);
2557         d_drop(dentry);
2558         __free_page(page);
2559         return error;
2560     }
2561 
2562     nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
2563 
2564     /*
2565      * No big deal if we can't add this page to the page cache here.
2566      * READLINK will get the missing page from the server if needed.
2567      */
2568     if (!add_to_page_cache_lru(page, d_inode(dentry)->i_mapping, 0,
2569                             GFP_KERNEL)) {
2570         SetPageUptodate(page);
2571         unlock_page(page);
2572         /*
2573          * add_to_page_cache_lru() grabs an extra page refcount.
2574          * Drop it here to avoid leaking this page later.
2575          */
2576         put_page(page);
2577     } else
2578         __free_page(page);
2579 
2580     return 0;
2581 }
2582 EXPORT_SYMBOL_GPL(nfs_symlink);
2583 
2584 int
2585 nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
2586 {
2587     struct inode *inode = d_inode(old_dentry);
2588     int error;
2589 
2590     dfprintk(VFS, "NFS: link(%pd2 -> %pd2)\n",
2591         old_dentry, dentry);
2592 
2593     trace_nfs_link_enter(inode, dir, dentry);
2594     d_drop(dentry);
2595     if (S_ISREG(inode->i_mode))
2596         nfs_sync_inode(inode);
2597     error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name);
2598     if (error == 0) {
2599         nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
2600         ihold(inode);
2601         d_add(dentry, inode);
2602     }
2603     trace_nfs_link_exit(inode, dir, dentry, error);
2604     return error;
2605 }
2606 EXPORT_SYMBOL_GPL(nfs_link);
2607 
2608 static void
2609 nfs_unblock_rename(struct rpc_task *task, struct nfs_renamedata *data)
2610 {
2611     struct dentry *new_dentry = data->new_dentry;
2612 
2613     new_dentry->d_fsdata = NULL;
2614     wake_up_var(&new_dentry->d_fsdata);
2615 }
2616 
2617 /*
2618  * RENAME
2619  * FIXME: Some nfsds, like the Linux user space nfsd, may generate a
2620  * different file handle for the same inode after a rename (e.g. when
2621  * moving to a different directory). A fail-safe method to do so would
2622  * be to look up old_dir/old_name, create a link to new_dir/new_name and
2623  * rename the old file using the sillyrename stuff. This way, the original
2624  * file in old_dir will go away when the last process iput()s the inode.
2625  *
2626  * FIXED.
2627  * 
2628  * It actually works quite well. One needs to have the possibility for
2629  * at least one ".nfs..." file in each directory the file ever gets
2630  * moved or linked to which happens automagically with the new
2631  * implementation that only depends on the dcache stuff instead of
2632  * using the inode layer
2633  *
2634  * Unfortunately, things are a little more complicated than indicated
2635  * above. For a cross-directory move, we want to make sure we can get
2636  * rid of the old inode after the operation.  This means there must be
2637  * no pending writes (if it's a file), and the use count must be 1.
2638  * If these conditions are met, we can drop the dentries before doing
2639  * the rename.
2640  */
2641 int nfs_rename(struct user_namespace *mnt_userns, struct inode *old_dir,
2642            struct dentry *old_dentry, struct inode *new_dir,
2643            struct dentry *new_dentry, unsigned int flags)
2644 {
2645     struct inode *old_inode = d_inode(old_dentry);
2646     struct inode *new_inode = d_inode(new_dentry);
2647     struct dentry *dentry = NULL;
2648     struct rpc_task *task;
2649     bool must_unblock = false;
2650     int error = -EBUSY;
2651 
2652     if (flags)
2653         return -EINVAL;
2654 
2655     dfprintk(VFS, "NFS: rename(%pd2 -> %pd2, ct=%d)\n",
2656          old_dentry, new_dentry,
2657          d_count(new_dentry));
2658 
2659     trace_nfs_rename_enter(old_dir, old_dentry, new_dir, new_dentry);
2660     /*
2661      * For non-directories, check whether the target is busy and if so,
2662      * make a copy of the dentry and then do a silly-rename. If the
2663      * silly-rename succeeds, the copied dentry is hashed and becomes
2664      * the new target.
2665      */
2666     if (new_inode && !S_ISDIR(new_inode->i_mode)) {
2667         /* We must prevent any concurrent open until the unlink
2668          * completes.  ->d_revalidate will wait for ->d_fsdata
2669          * to clear.  We set it here to ensure no lookup succeeds until
2670          * the unlink is complete on the server.
2671          */
2672         error = -ETXTBSY;
2673         if (WARN_ON(new_dentry->d_flags & DCACHE_NFSFS_RENAMED) ||
2674             WARN_ON(new_dentry->d_fsdata == NFS_FSDATA_BLOCKED))
2675             goto out;
2676         if (new_dentry->d_fsdata) {
2677             /* old devname */
2678             kfree(new_dentry->d_fsdata);
2679             new_dentry->d_fsdata = NULL;
2680         }
2681 
2682         spin_lock(&new_dentry->d_lock);
2683         if (d_count(new_dentry) > 2) {
2684             int err;
2685 
2686             spin_unlock(&new_dentry->d_lock);
2687 
2688             /* copy the target dentry's name */
2689             dentry = d_alloc(new_dentry->d_parent,
2690                      &new_dentry->d_name);
2691             if (!dentry)
2692                 goto out;
2693 
2694             /* silly-rename the existing target ... */
2695             err = nfs_sillyrename(new_dir, new_dentry);
2696             if (err)
2697                 goto out;
2698 
2699             new_dentry = dentry;
2700             new_inode = NULL;
2701         } else {
2702             new_dentry->d_fsdata = NFS_FSDATA_BLOCKED;
2703             must_unblock = true;
2704             spin_unlock(&new_dentry->d_lock);
2705         }
2706 
2707     }
2708 
2709     if (S_ISREG(old_inode->i_mode))
2710         nfs_sync_inode(old_inode);
2711     task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry,
2712                 must_unblock ? nfs_unblock_rename : NULL);
2713     if (IS_ERR(task)) {
2714         error = PTR_ERR(task);
2715         goto out;
2716     }
2717 
2718     error = rpc_wait_for_completion_task(task);
2719     if (error != 0) {
2720         ((struct nfs_renamedata *)task->tk_calldata)->cancelled = 1;
2721         /* Paired with the atomic_dec_and_test() barrier in rpc_do_put_task() */
2722         smp_wmb();
2723     } else
2724         error = task->tk_status;
2725     rpc_put_task(task);
2726     /* Ensure the inode attributes are revalidated */
2727     if (error == 0) {
2728         spin_lock(&old_inode->i_lock);
2729         NFS_I(old_inode)->attr_gencount = nfs_inc_attr_generation_counter();
2730         nfs_set_cache_invalid(old_inode, NFS_INO_INVALID_CHANGE |
2731                              NFS_INO_INVALID_CTIME |
2732                              NFS_INO_REVAL_FORCED);
2733         spin_unlock(&old_inode->i_lock);
2734     }
2735 out:
2736     trace_nfs_rename_exit(old_dir, old_dentry,
2737             new_dir, new_dentry, error);
2738     if (!error) {
2739         if (new_inode != NULL)
2740             nfs_drop_nlink(new_inode);
2741         /*
2742          * The d_move() should be here instead of in an async RPC completion
2743          * handler because we need the proper locks to move the dentry.  If
2744          * we're interrupted by a signal, the async RPC completion handler
2745          * should mark the directories for revalidation.
2746          */
2747         d_move(old_dentry, new_dentry);
2748         nfs_set_verifier(old_dentry,
2749                     nfs_save_change_attribute(new_dir));
2750     } else if (error == -ENOENT)
2751         nfs_dentry_handle_enoent(old_dentry);
2752 
2753     /* new dentry created? */
2754     if (dentry)
2755         dput(dentry);
2756     return error;
2757 }
2758 EXPORT_SYMBOL_GPL(nfs_rename);
2759 
2760 static DEFINE_SPINLOCK(nfs_access_lru_lock);
2761 static LIST_HEAD(nfs_access_lru_list);
2762 static atomic_long_t nfs_access_nr_entries;
2763 
2764 static unsigned long nfs_access_max_cachesize = 4*1024*1024;
2765 module_param(nfs_access_max_cachesize, ulong, 0644);
2766 MODULE_PARM_DESC(nfs_access_max_cachesize, "NFS access maximum total cache length");
2767 
2768 static void nfs_access_free_entry(struct nfs_access_entry *entry)
2769 {
2770     put_group_info(entry->group_info);
2771     kfree_rcu(entry, rcu_head);
2772     smp_mb__before_atomic();
2773     atomic_long_dec(&nfs_access_nr_entries);
2774     smp_mb__after_atomic();
2775 }
2776 
2777 static void nfs_access_free_list(struct list_head *head)
2778 {
2779     struct nfs_access_entry *cache;
2780 
2781     while (!list_empty(head)) {
2782         cache = list_entry(head->next, struct nfs_access_entry, lru);
2783         list_del(&cache->lru);
2784         nfs_access_free_entry(cache);
2785     }
2786 }
2787 
2788 static unsigned long
2789 nfs_do_access_cache_scan(unsigned int nr_to_scan)
2790 {
2791     LIST_HEAD(head);
2792     struct nfs_inode *nfsi, *next;
2793     struct nfs_access_entry *cache;
2794     long freed = 0;
2795 
2796     spin_lock(&nfs_access_lru_lock);
2797     list_for_each_entry_safe(nfsi, next, &nfs_access_lru_list, access_cache_inode_lru) {
2798         struct inode *inode;
2799 
2800         if (nr_to_scan-- == 0)
2801             break;
2802         inode = &nfsi->vfs_inode;
2803         spin_lock(&inode->i_lock);
2804         if (list_empty(&nfsi->access_cache_entry_lru))
2805             goto remove_lru_entry;
2806         cache = list_entry(nfsi->access_cache_entry_lru.next,
2807                 struct nfs_access_entry, lru);
2808         list_move(&cache->lru, &head);
2809         rb_erase(&cache->rb_node, &nfsi->access_cache);
2810         freed++;
2811         if (!list_empty(&nfsi->access_cache_entry_lru))
2812             list_move_tail(&nfsi->access_cache_inode_lru,
2813                     &nfs_access_lru_list);
2814         else {
2815 remove_lru_entry:
2816             list_del_init(&nfsi->access_cache_inode_lru);
2817             smp_mb__before_atomic();
2818             clear_bit(NFS_INO_ACL_LRU_SET, &nfsi->flags);
2819             smp_mb__after_atomic();
2820         }
2821         spin_unlock(&inode->i_lock);
2822     }
2823     spin_unlock(&nfs_access_lru_lock);
2824     nfs_access_free_list(&head);
2825     return freed;
2826 }
2827 
2828 unsigned long
2829 nfs_access_cache_scan(struct shrinker *shrink, struct shrink_control *sc)
2830 {
2831     int nr_to_scan = sc->nr_to_scan;
2832     gfp_t gfp_mask = sc->gfp_mask;
2833 
2834     if ((gfp_mask & GFP_KERNEL) != GFP_KERNEL)
2835         return SHRINK_STOP;
2836     return nfs_do_access_cache_scan(nr_to_scan);
2837 }
2838 
2839 
2840 unsigned long
2841 nfs_access_cache_count(struct shrinker *shrink, struct shrink_control *sc)
2842 {
2843     return vfs_pressure_ratio(atomic_long_read(&nfs_access_nr_entries));
2844 }
2845 
2846 static void
2847 nfs_access_cache_enforce_limit(void)
2848 {
2849     long nr_entries = atomic_long_read(&nfs_access_nr_entries);
2850     unsigned long diff;
2851     unsigned int nr_to_scan;
2852 
2853     if (nr_entries < 0 || nr_entries <= nfs_access_max_cachesize)
2854         return;
2855     nr_to_scan = 100;
2856     diff = nr_entries - nfs_access_max_cachesize;
2857     if (diff < nr_to_scan)
2858         nr_to_scan = diff;
2859     nfs_do_access_cache_scan(nr_to_scan);
2860 }
2861 
2862 static void __nfs_access_zap_cache(struct nfs_inode *nfsi, struct list_head *head)
2863 {
2864     struct rb_root *root_node = &nfsi->access_cache;
2865     struct rb_node *n;
2866     struct nfs_access_entry *entry;
2867 
2868     /* Unhook entries from the cache */
2869     while ((n = rb_first(root_node)) != NULL) {
2870         entry = rb_entry(n, struct nfs_access_entry, rb_node);
2871         rb_erase(n, root_node);
2872         list_move(&entry->lru, head);
2873     }
2874     nfsi->cache_validity &= ~NFS_INO_INVALID_ACCESS;
2875 }
2876 
2877 void nfs_access_zap_cache(struct inode *inode)
2878 {
2879     LIST_HEAD(head);
2880 
2881     if (test_bit(NFS_INO_ACL_LRU_SET, &NFS_I(inode)->flags) == 0)
2882         return;
2883     /* Remove from global LRU init */
2884     spin_lock(&nfs_access_lru_lock);
2885     if (test_and_clear_bit(NFS_INO_ACL_LRU_SET, &NFS_I(inode)->flags))
2886         list_del_init(&NFS_I(inode)->access_cache_inode_lru);
2887 
2888     spin_lock(&inode->i_lock);
2889     __nfs_access_zap_cache(NFS_I(inode), &head);
2890     spin_unlock(&inode->i_lock);
2891     spin_unlock(&nfs_access_lru_lock);
2892     nfs_access_free_list(&head);
2893 }
2894 EXPORT_SYMBOL_GPL(nfs_access_zap_cache);
2895 
2896 static int access_cmp(const struct cred *a, const struct nfs_access_entry *b)
2897 {
2898     struct group_info *ga, *gb;
2899     int g;
2900 
2901     if (uid_lt(a->fsuid, b->fsuid))
2902         return -1;
2903     if (uid_gt(a->fsuid, b->fsuid))
2904         return 1;
2905 
2906     if (gid_lt(a->fsgid, b->fsgid))
2907         return -1;
2908     if (gid_gt(a->fsgid, b->fsgid))
2909         return 1;
2910 
2911     ga = a->group_info;
2912     gb = b->group_info;
2913     if (ga == gb)
2914         return 0;
2915     if (ga == NULL)
2916         return -1;
2917     if (gb == NULL)
2918         return 1;
2919     if (ga->ngroups < gb->ngroups)
2920         return -1;
2921     if (ga->ngroups > gb->ngroups)
2922         return 1;
2923 
2924     for (g = 0; g < ga->ngroups; g++) {
2925         if (gid_lt(ga->gid[g], gb->gid[g]))
2926             return -1;
2927         if (gid_gt(ga->gid[g], gb->gid[g]))
2928             return 1;
2929     }
2930     return 0;
2931 }
2932 
2933 static struct nfs_access_entry *nfs_access_search_rbtree(struct inode *inode, const struct cred *cred)
2934 {
2935     struct rb_node *n = NFS_I(inode)->access_cache.rb_node;
2936 
2937     while (n != NULL) {
2938         struct nfs_access_entry *entry =
2939             rb_entry(n, struct nfs_access_entry, rb_node);
2940         int cmp = access_cmp(cred, entry);
2941 
2942         if (cmp < 0)
2943             n = n->rb_left;
2944         else if (cmp > 0)
2945             n = n->rb_right;
2946         else
2947             return entry;
2948     }
2949     return NULL;
2950 }
2951 
2952 static int nfs_access_get_cached_locked(struct inode *inode, const struct cred *cred, u32 *mask, bool may_block)
2953 {
2954     struct nfs_inode *nfsi = NFS_I(inode);
2955     struct nfs_access_entry *cache;
2956     bool retry = true;
2957     int err;
2958 
2959     spin_lock(&inode->i_lock);
2960     for(;;) {
2961         if (nfsi->cache_validity & NFS_INO_INVALID_ACCESS)
2962             goto out_zap;
2963         cache = nfs_access_search_rbtree(inode, cred);
2964         err = -ENOENT;
2965         if (cache == NULL)
2966             goto out;
2967         /* Found an entry, is our attribute cache valid? */
2968         if (!nfs_check_cache_invalid(inode, NFS_INO_INVALID_ACCESS))
2969             break;
2970         if (!retry)
2971             break;
2972         err = -ECHILD;
2973         if (!may_block)
2974             goto out;
2975         spin_unlock(&inode->i_lock);
2976         err = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
2977         if (err)
2978             return err;
2979         spin_lock(&inode->i_lock);
2980         retry = false;
2981     }
2982     *mask = cache->mask;
2983     list_move_tail(&cache->lru, &nfsi->access_cache_entry_lru);
2984     err = 0;
2985 out:
2986     spin_unlock(&inode->i_lock);
2987     return err;
2988 out_zap:
2989     spin_unlock(&inode->i_lock);
2990     nfs_access_zap_cache(inode);
2991     return -ENOENT;
2992 }
2993 
2994 static int nfs_access_get_cached_rcu(struct inode *inode, const struct cred *cred, u32 *mask)
2995 {
2996     /* Only check the most recently returned cache entry,
2997      * but do it without locking.
2998      */
2999     struct nfs_inode *nfsi = NFS_I(inode);
3000     struct nfs_access_entry *cache;
3001     int err = -ECHILD;
3002     struct list_head *lh;
3003 
3004     rcu_read_lock();
3005     if (nfsi->cache_validity & NFS_INO_INVALID_ACCESS)
3006         goto out;
3007     lh = rcu_dereference(list_tail_rcu(&nfsi->access_cache_entry_lru));
3008     cache = list_entry(lh, struct nfs_access_entry, lru);
3009     if (lh == &nfsi->access_cache_entry_lru ||
3010         access_cmp(cred, cache) != 0)
3011         cache = NULL;
3012     if (cache == NULL)
3013         goto out;
3014     if (nfs_check_cache_invalid(inode, NFS_INO_INVALID_ACCESS))
3015         goto out;
3016     *mask = cache->mask;
3017     err = 0;
3018 out:
3019     rcu_read_unlock();
3020     return err;
3021 }
3022 
3023 int nfs_access_get_cached(struct inode *inode, const struct cred *cred,
3024               u32 *mask, bool may_block)
3025 {
3026     int status;
3027 
3028     status = nfs_access_get_cached_rcu(inode, cred, mask);
3029     if (status != 0)
3030         status = nfs_access_get_cached_locked(inode, cred, mask,
3031             may_block);
3032 
3033     return status;
3034 }
3035 EXPORT_SYMBOL_GPL(nfs_access_get_cached);
3036 
3037 static void nfs_access_add_rbtree(struct inode *inode,
3038                   struct nfs_access_entry *set,
3039                   const struct cred *cred)
3040 {
3041     struct nfs_inode *nfsi = NFS_I(inode);
3042     struct rb_root *root_node = &nfsi->access_cache;
3043     struct rb_node **p = &root_node->rb_node;
3044     struct rb_node *parent = NULL;
3045     struct nfs_access_entry *entry;
3046     int cmp;
3047 
3048     spin_lock(&inode->i_lock);
3049     while (*p != NULL) {
3050         parent = *p;
3051         entry = rb_entry(parent, struct nfs_access_entry, rb_node);
3052         cmp = access_cmp(cred, entry);
3053 
3054         if (cmp < 0)
3055             p = &parent->rb_left;
3056         else if (cmp > 0)
3057             p = &parent->rb_right;
3058         else
3059             goto found;
3060     }
3061     rb_link_node(&set->rb_node, parent, p);
3062     rb_insert_color(&set->rb_node, root_node);
3063     list_add_tail(&set->lru, &nfsi->access_cache_entry_lru);
3064     spin_unlock(&inode->i_lock);
3065     return;
3066 found:
3067     rb_replace_node(parent, &set->rb_node, root_node);
3068     list_add_tail(&set->lru, &nfsi->access_cache_entry_lru);
3069     list_del(&entry->lru);
3070     spin_unlock(&inode->i_lock);
3071     nfs_access_free_entry(entry);
3072 }
3073 
3074 void nfs_access_add_cache(struct inode *inode, struct nfs_access_entry *set,
3075               const struct cred *cred)
3076 {
3077     struct nfs_access_entry *cache = kmalloc(sizeof(*cache), GFP_KERNEL);
3078     if (cache == NULL)
3079         return;
3080     RB_CLEAR_NODE(&cache->rb_node);
3081     cache->fsuid = cred->fsuid;
3082     cache->fsgid = cred->fsgid;
3083     cache->group_info = get_group_info(cred->group_info);
3084     cache->mask = set->mask;
3085 
3086     /* The above field assignments must be visible
3087      * before this item appears on the lru.  We cannot easily
3088      * use rcu_assign_pointer, so just force the memory barrier.
3089      */
3090     smp_wmb();
3091     nfs_access_add_rbtree(inode, cache, cred);
3092 
3093     /* Update accounting */
3094     smp_mb__before_atomic();
3095     atomic_long_inc(&nfs_access_nr_entries);
3096     smp_mb__after_atomic();
3097 
3098     /* Add inode to global LRU list */
3099     if (!test_bit(NFS_INO_ACL_LRU_SET, &NFS_I(inode)->flags)) {
3100         spin_lock(&nfs_access_lru_lock);
3101         if (!test_and_set_bit(NFS_INO_ACL_LRU_SET, &NFS_I(inode)->flags))
3102             list_add_tail(&NFS_I(inode)->access_cache_inode_lru,
3103                     &nfs_access_lru_list);
3104         spin_unlock(&nfs_access_lru_lock);
3105     }
3106     nfs_access_cache_enforce_limit();
3107 }
3108 EXPORT_SYMBOL_GPL(nfs_access_add_cache);
3109 
3110 #define NFS_MAY_READ (NFS_ACCESS_READ)
3111 #define NFS_MAY_WRITE (NFS_ACCESS_MODIFY | \
3112         NFS_ACCESS_EXTEND | \
3113         NFS_ACCESS_DELETE)
3114 #define NFS_FILE_MAY_WRITE (NFS_ACCESS_MODIFY | \
3115         NFS_ACCESS_EXTEND)
3116 #define NFS_DIR_MAY_WRITE NFS_MAY_WRITE
3117 #define NFS_MAY_LOOKUP (NFS_ACCESS_LOOKUP)
3118 #define NFS_MAY_EXECUTE (NFS_ACCESS_EXECUTE)
3119 static int
3120 nfs_access_calc_mask(u32 access_result, umode_t umode)
3121 {
3122     int mask = 0;
3123 
3124     if (access_result & NFS_MAY_READ)
3125         mask |= MAY_READ;
3126     if (S_ISDIR(umode)) {
3127         if ((access_result & NFS_DIR_MAY_WRITE) == NFS_DIR_MAY_WRITE)
3128             mask |= MAY_WRITE;
3129         if ((access_result & NFS_MAY_LOOKUP) == NFS_MAY_LOOKUP)
3130             mask |= MAY_EXEC;
3131     } else if (S_ISREG(umode)) {
3132         if ((access_result & NFS_FILE_MAY_WRITE) == NFS_FILE_MAY_WRITE)
3133             mask |= MAY_WRITE;
3134         if ((access_result & NFS_MAY_EXECUTE) == NFS_MAY_EXECUTE)
3135             mask |= MAY_EXEC;
3136     } else if (access_result & NFS_MAY_WRITE)
3137             mask |= MAY_WRITE;
3138     return mask;
3139 }
3140 
3141 void nfs_access_set_mask(struct nfs_access_entry *entry, u32 access_result)
3142 {
3143     entry->mask = access_result;
3144 }
3145 EXPORT_SYMBOL_GPL(nfs_access_set_mask);
3146 
3147 static int nfs_do_access(struct inode *inode, const struct cred *cred, int mask)
3148 {
3149     struct nfs_access_entry cache;
3150     bool may_block = (mask & MAY_NOT_BLOCK) == 0;
3151     int cache_mask = -1;
3152     int status;
3153 
3154     trace_nfs_access_enter(inode);
3155 
3156     status = nfs_access_get_cached(inode, cred, &cache.mask, may_block);
3157     if (status == 0)
3158         goto out_cached;
3159 
3160     status = -ECHILD;
3161     if (!may_block)
3162         goto out;
3163 
3164     /*
3165      * Determine which access bits we want to ask for...
3166      */
3167     cache.mask = NFS_ACCESS_READ | NFS_ACCESS_MODIFY | NFS_ACCESS_EXTEND |
3168              nfs_access_xattr_mask(NFS_SERVER(inode));
3169     if (S_ISDIR(inode->i_mode))
3170         cache.mask |= NFS_ACCESS_DELETE | NFS_ACCESS_LOOKUP;
3171     else
3172         cache.mask |= NFS_ACCESS_EXECUTE;
3173     status = NFS_PROTO(inode)->access(inode, &cache, cred);
3174     if (status != 0) {
3175         if (status == -ESTALE) {
3176             if (!S_ISDIR(inode->i_mode))
3177                 nfs_set_inode_stale(inode);
3178             else
3179                 nfs_zap_caches(inode);
3180         }
3181         goto out;
3182     }
3183     nfs_access_add_cache(inode, &cache, cred);
3184 out_cached:
3185     cache_mask = nfs_access_calc_mask(cache.mask, inode->i_mode);
3186     if ((mask & ~cache_mask & (MAY_READ | MAY_WRITE | MAY_EXEC)) != 0)
3187         status = -EACCES;
3188 out:
3189     trace_nfs_access_exit(inode, mask, cache_mask, status);
3190     return status;
3191 }
3192 
3193 static int nfs_open_permission_mask(int openflags)
3194 {
3195     int mask = 0;
3196 
3197     if (openflags & __FMODE_EXEC) {
3198         /* ONLY check exec rights */
3199         mask = MAY_EXEC;
3200     } else {
3201         if ((openflags & O_ACCMODE) != O_WRONLY)
3202             mask |= MAY_READ;
3203         if ((openflags & O_ACCMODE) != O_RDONLY)
3204             mask |= MAY_WRITE;
3205     }
3206 
3207     return mask;
3208 }
3209 
3210 int nfs_may_open(struct inode *inode, const struct cred *cred, int openflags)
3211 {
3212     return nfs_do_access(inode, cred, nfs_open_permission_mask(openflags));
3213 }
3214 EXPORT_SYMBOL_GPL(nfs_may_open);
3215 
3216 static int nfs_execute_ok(struct inode *inode, int mask)
3217 {
3218     struct nfs_server *server = NFS_SERVER(inode);
3219     int ret = 0;
3220 
3221     if (S_ISDIR(inode->i_mode))
3222         return 0;
3223     if (nfs_check_cache_invalid(inode, NFS_INO_INVALID_MODE)) {
3224         if (mask & MAY_NOT_BLOCK)
3225             return -ECHILD;
3226         ret = __nfs_revalidate_inode(server, inode);
3227     }
3228     if (ret == 0 && !execute_ok(inode))
3229         ret = -EACCES;
3230     return ret;
3231 }
3232 
3233 int nfs_permission(struct user_namespace *mnt_userns,
3234            struct inode *inode,
3235            int mask)
3236 {
3237     const struct cred *cred = current_cred();
3238     int res = 0;
3239 
3240     nfs_inc_stats(inode, NFSIOS_VFSACCESS);
3241 
3242     if ((mask & (MAY_READ | MAY_WRITE | MAY_EXEC)) == 0)
3243         goto out;
3244     /* Is this sys_access() ? */
3245     if (mask & (MAY_ACCESS | MAY_CHDIR))
3246         goto force_lookup;
3247 
3248     switch (inode->i_mode & S_IFMT) {
3249         case S_IFLNK:
3250             goto out;
3251         case S_IFREG:
3252             if ((mask & MAY_OPEN) &&
3253                nfs_server_capable(inode, NFS_CAP_ATOMIC_OPEN))
3254                 return 0;
3255             break;
3256         case S_IFDIR:
3257             /*
3258              * Optimize away all write operations, since the server
3259              * will check permissions when we perform the op.
3260              */
3261             if ((mask & MAY_WRITE) && !(mask & MAY_READ))
3262                 goto out;
3263     }
3264 
3265 force_lookup:
3266     if (!NFS_PROTO(inode)->access)
3267         goto out_notsup;
3268 
3269     res = nfs_do_access(inode, cred, mask);
3270 out:
3271     if (!res && (mask & MAY_EXEC))
3272         res = nfs_execute_ok(inode, mask);
3273 
3274     dfprintk(VFS, "NFS: permission(%s/%lu), mask=0x%x, res=%d\n",
3275         inode->i_sb->s_id, inode->i_ino, mask, res);
3276     return res;
3277 out_notsup:
3278     if (mask & MAY_NOT_BLOCK)
3279         return -ECHILD;
3280 
3281     res = nfs_revalidate_inode(inode, NFS_INO_INVALID_MODE |
3282                           NFS_INO_INVALID_OTHER);
3283     if (res == 0)
3284         res = generic_permission(&init_user_ns, inode, mask);
3285     goto out;
3286 }
3287 EXPORT_SYMBOL_GPL(nfs_permission);