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

Commit 5c346854 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFS: Assume eof if the server returns no readdir records



Some servers are known to be buggy w.r.t. this. Deal with them...

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 463a376e
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -466,8 +466,9 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
	struct xdr_stream stream;
	struct xdr_buf buf;
	__be32 *ptr = xdr_page;
	int status;
	struct nfs_cache_array *array;
	unsigned int count = 0;
	int status;

	buf.head->iov_base = xdr_page;
	buf.head->iov_len = buflen;
@@ -488,6 +489,8 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
			break;
		}

		count++;

		if (desc->plus == 1)
			nfs_prime_dcache(desc->file->f_path.dentry, entry);

@@ -496,13 +499,14 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
			break;
	} while (!entry->eof);

	if (status == -EBADCOOKIE && entry->eof) {
	if (count == 0 || (status == -EBADCOOKIE && entry->eof == 1)) {
		array = nfs_readdir_get_array(page);
		if (!IS_ERR(array)) {
			array->eof_index = array->size;
			status = 0;
			nfs_readdir_release_array(page);
		}
		} else
			status = PTR_ERR(array);
	}
	return status;
}