sysfs: Cache the last sysfs_dirent to improve readdir scalability v2
authorEric W. Biederman <ebiederm@xmission.com>
Fri, 1 Jan 2010 22:43:53 +0000 (14:43 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 8 Mar 2010 01:04:48 +0000 (17:04 -0800)
commit1e5289c97bba2d8ee7239a416bc3f28743362cd9
tree5a9c422b6dc16e4084866d548c043994da37e3d1
parent3f5468c9ae293cbca43e4ffe6ca3b3235189042a
sysfs: Cache the last sysfs_dirent to improve readdir scalability v2

When sysfs_readdir stops short we now cache the next
sysfs_dirent to return to user space in filp->private_data.
There is no impact on the rest of sysfs by doing this and
in the common case it allows us to pick up exactly where
we left off with no seeking.

Additionally I drop and regrab the sysfs_mutex around
filldir to avoid a page fault abritrarily increasing the
hold time on the sysfs_mutex.

v2: Returned to using INT_MAX as the EOF condition.
    seekdir is ambiguous unless all directory entries have
    a unique f_pos value.

Fixes http://bugzilla.kernel.org/show_bug.cgi?id=14949

Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/sysfs/dir.c