[PATCH] prepare vfs_readdir() callers to returning filldir result
It's not the final state, but it allows moving ->readdir() instances to passing filldir return value to caller of vfs_readdir(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -1831,6 +1831,7 @@ struct buffered_dirent {
|
||||
struct readdir_data {
|
||||
char *dirent;
|
||||
size_t used;
|
||||
int full;
|
||||
};
|
||||
|
||||
static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
|
||||
@@ -1841,8 +1842,10 @@ static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
|
||||
unsigned int reclen;
|
||||
|
||||
reclen = ALIGN(sizeof(struct buffered_dirent) + namlen, sizeof(u64));
|
||||
if (buf->used + reclen > PAGE_SIZE)
|
||||
if (buf->used + reclen > PAGE_SIZE) {
|
||||
buf->full = 1;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
de->namlen = namlen;
|
||||
de->offset = offset;
|
||||
@@ -1874,9 +1877,13 @@ static int nfsd_buffered_readdir(struct file *file, filldir_t func,
|
||||
unsigned int reclen;
|
||||
|
||||
buf.used = 0;
|
||||
buf.full = 0;
|
||||
|
||||
host_err = vfs_readdir(file, nfsd_buffered_filldir, &buf);
|
||||
if (host_err)
|
||||
if (buf.full)
|
||||
host_err = 0;
|
||||
|
||||
if (host_err < 0)
|
||||
break;
|
||||
|
||||
size = buf.used;
|
||||
|
Reference in New Issue
Block a user