NFS: Don't ignore errors from nfs_do_filldir()

We should ignore the errors from the filldir callback, and just interpret
them as meaning we should exit, however we should definitely pass back
ENOMEM errors.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Trond Myklebust 2010-11-20 13:55:33 -05:00
parent 85f8607e16
commit ece0b4233b

View file

@ -709,13 +709,15 @@ int nfs_do_filldir(nfs_readdir_descriptor_t *desc, void *dirent,
}
for (i = desc->cache_entry_index; i < array->size; i++) {
struct nfs_cache_array_entry *ent;
d_type = DT_UNKNOWN;
res = filldir(dirent, array->array[i].string.name,
array->array[i].string.len, file->f_pos,
nfs_compat_user_ino64(array->array[i].ino), d_type);
if (res < 0)
ent = &array->array[i];
if (filldir(dirent, ent->string.name, ent->string.len,
file->f_pos, nfs_compat_user_ino64(ent->ino), d_type) < 0) {
desc->eof = 1;
break;
}
file->f_pos++;
desc->cache_entry_index = i;
if (i < (array->size-1))
@ -820,14 +822,14 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
res = readdir_search_pagecache(desc);
if (res == -EBADCOOKIE) {
res = 0;
/* This means either end of directory */
if (*desc->dir_cookie && desc->eof == 0) {
/* Or that the server has 'lost' a cookie */
res = uncached_readdir(desc, dirent, filldir);
if (res >= 0)
if (res == 0)
continue;
}
res = 0;
break;
}
if (res == -ETOOSMALL && desc->plus) {
@ -842,10 +844,8 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
break;
res = nfs_do_filldir(desc, dirent, filldir);
if (res < 0) {
res = 0;
if (res < 0)
break;
}
}
out:
nfs_unblock_sillyrename(dentry);