Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ece0b423 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 85f8607e
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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,11 +844,9 @@ 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);
	if (res > 0)