提交 ece0b423 编写于 作者: T Trond Myklebust

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: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 85f8607e
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册