size_t array_size;
        struct inode *inode = file_inode(desc->file);
        unsigned int dtsize = desc->dtsize;
+       unsigned int pglen;
        int status = -ENOMEM;
 
        entry = kzalloc(sizeof(*entry), GFP_KERNEL);
        if (!pages)
                goto out;
 
-       do {
-               unsigned int pglen;
-               status = nfs_readdir_xdr_filler(desc, verf_arg, entry->cookie,
-                                               pages, dtsize,
-                                               verf_res);
-               if (status < 0)
-                       break;
-
-               pglen = status;
-               if (pglen == 0) {
-                       nfs_readdir_page_set_eof(page);
-                       break;
-               }
-
-               verf_arg = verf_res;
+       status = nfs_readdir_xdr_filler(desc, verf_arg, entry->cookie, pages,
+                                       dtsize, verf_res);
+       if (status < 0)
+               goto free_pages;
 
+       pglen = status;
+       if (pglen != 0)
                status = nfs_readdir_page_filler(desc, entry, pages, pglen,
                                                 arrays, narrays);
-               desc->buffer_fills++;
-       } while (!status && nfs_readdir_page_needs_filling(page) &&
-               page_mapping(page));
+       else
+               nfs_readdir_page_set_eof(page);
+       desc->buffer_fills++;
 
+free_pages:
        nfs_readdir_free_pages(pages, array_size);
 out:
        nfs_free_fattr(entry->fattr);