[PATCH] Fix error handling with put_compat_statfs()
authorDavid Gibson <david@gibson.dropbear.id.au>
Tue, 22 Nov 2005 05:32:23 +0000 (21:32 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 22 Nov 2005 17:13:43 +0000 (09:13 -0800)
commit86e07ce71a8aad5074f7316f9b297d2137630283
treeee1b37dd5bda4868fb3eb0dd34dd446fe73d8141
parentf3d48f0373c14a6203202f7b1dfc7b0d8aaf6ed2
[PATCH] Fix error handling with put_compat_statfs()

In fs/compat.c, whenever put_compat_statfs() returns an error, the
containing syscall returns -EFAULT.  This is presumably by analogy with the
non-compat case, where any non-zero code from copy_to_user() should be
translated into an EFAULT.  However, put_compat_statfs() is also return
-EOVERFLOW.  The same applies for put_compat_statfs64().

This bug can be observed with a statfs() on a hugetlbfs directory.
hugetlbfs, when mounted without limits reports available, free and total
blocks as -1 (itself a bug, another patch coming).  statfs() will
mysteriously return EFAULT although it's parameters are perfectly valid
addresses.

This patch causes the compat versions of statfs() and statfs64() to
correctly propogate the return values from put_compat_statfs() and
put_compat_statfs64().

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/compat.c