/*
  * Once we've found the start of the dirent within a page: fill 'er up...
  */
-static void nfs_do_filldir(struct nfs_readdir_descriptor *desc)
+static void nfs_do_filldir(struct nfs_readdir_descriptor *desc,
+                          const __be32 *verf)
 {
        struct file     *file = desc->file;
-       struct nfs_inode *nfsi = NFS_I(file_inode(file));
        struct nfs_cache_array *array;
        unsigned int i = 0;
 
                        desc->eof = true;
                        break;
                }
-               memcpy(desc->verf, nfsi->cookieverf, sizeof(desc->verf));
+               memcpy(desc->verf, verf, sizeof(desc->verf));
                if (i < (array->size-1))
                        desc->dir_cookie = array->array[i+1].cookie;
                else
 
        for (i = 0; !desc->eof && i < sz && arrays[i]; i++) {
                desc->page = arrays[i];
-               nfs_do_filldir(desc);
+               nfs_do_filldir(desc, verf);
        }
        desc->page = NULL;
 
 {
        struct dentry   *dentry = file_dentry(file);
        struct inode    *inode = d_inode(dentry);
+       struct nfs_inode *nfsi = NFS_I(inode);
        struct nfs_open_dir_context *dir_ctx = file->private_data;
        struct nfs_readdir_descriptor *desc;
        int res;
                        break;
                }
                if (res == -ETOOSMALL && desc->plus) {
-                       clear_bit(NFS_INO_ADVISE_RDPLUS, &NFS_I(inode)->flags);
+                       clear_bit(NFS_INO_ADVISE_RDPLUS, &nfsi->flags);
                        nfs_zap_caches(inode);
                        desc->page_index = 0;
                        desc->plus = false;
                if (res < 0)
                        break;
 
-               nfs_do_filldir(desc);
+               nfs_do_filldir(desc, nfsi->cookieverf);
                nfs_readdir_page_unlock_and_put_cached(desc);
        } while (!desc->eof);