diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2008-08-24 07:29:52 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-10-23 05:13:10 -0400 | 
| commit | 53c9c5c0e32c69f9df1822e47671c13e3402c82f (patch) | |
| tree | 76aae2cfde109c97451d40b5c6e5063e22690a03 /fs/compat.c | |
| parent | a9885444f7ff6e9156adb1adf5558ded9a39ad0a (diff) | |
| download | olio-linux-3.10-53c9c5c0e32c69f9df1822e47671c13e3402c82f.tar.xz olio-linux-3.10-53c9c5c0e32c69f9df1822e47671c13e3402c82f.zip  | |
[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>
Diffstat (limited to 'fs/compat.c')
| -rw-r--r-- | fs/compat.c | 22 | 
1 files changed, 8 insertions, 14 deletions
diff --git a/fs/compat.c b/fs/compat.c index 5f9ec449c79..cb36245f9fe 100644 --- a/fs/compat.c +++ b/fs/compat.c @@ -869,7 +869,7 @@ asmlinkage long compat_sys_old_readdir(unsigned int fd,  	buf.dirent = dirent;  	error = vfs_readdir(file, compat_fillonedir, &buf); -	if (error >= 0) +	if (buf.result)  		error = buf.result;  	fput(file); @@ -956,9 +956,8 @@ asmlinkage long compat_sys_getdents(unsigned int fd,  	buf.error = 0;  	error = vfs_readdir(file, compat_filldir, &buf); -	if (error < 0) -		goto out_putf; -	error = buf.error; +	if (error >= 0) +		error = buf.error;  	lastdirent = buf.previous;  	if (lastdirent) {  		if (put_user(file->f_pos, &lastdirent->d_off)) @@ -966,8 +965,6 @@ asmlinkage long compat_sys_getdents(unsigned int fd,  		else  			error = count - buf.count;  	} - -out_putf:  	fput(file);  out:  	return error; @@ -1047,19 +1044,16 @@ asmlinkage long compat_sys_getdents64(unsigned int fd,  	buf.error = 0;  	error = vfs_readdir(file, compat_filldir64, &buf); -	if (error < 0) -		goto out_putf; -	error = buf.error; +	if (error >= 0) +		error = buf.error;  	lastdirent = buf.previous;  	if (lastdirent) {  		typeof(lastdirent->d_off) d_off = file->f_pos; -		error = -EFAULT;  		if (__put_user_unaligned(d_off, &lastdirent->d_off)) -			goto out_putf; -		error = count - buf.count; +			error = -EFAULT; +		else +			error = count - buf.count;  	} - -out_putf:  	fput(file);  out:  	return error;  |