Linux 3.11 compat: fops->iterate()
authorRichard Yao <ryao@gentoo.org>
Wed, 7 Aug 2013 12:53:45 +0000 (08:53 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 15 Aug 2013 23:19:07 +0000 (16:19 -0700)
commit0f37d0c8bed442dd0d2c1b1dddd68653fa6eec66
treebbd56b426b2b72bed0e3f81afaab2ddf5e613e3e
parent34e143323e359b42bc9d06dd19cc4b1f13091283
Linux 3.11 compat: fops->iterate()

Commit torvalds/linux@2233f31aade393641f0eaed43a71110e629bb900
replaced ->readdir() with ->iterate() in struct file_operations.
All filesystems must now use the new ->iterate method.

To handle this the code was reworked to use the new ->iterate
interface.  Care was taken to keep the majority of changes
confined to the ZPL layer which is already Linux specific.
However, minor changes were required to the common zfs_readdir()
function.

Compatibility with older kernels was accomplished by adding
versions of the trivial dir_emit* helper functions.  Also the
various *_readdir() functions were reworked in to wrappers
which create a dir_context structure to pass to the new
*_iterate() functions.

Unfortunately, the new dir_emit* functions prevent us from
passing a private pointer to the filldir function.  The xattr
directory code leveraged this ability through zfs_readdir()
to generate the list of xattr names.  Since we can no longer
use zfs_readdir() a simplified zpl_xattr_readdir() function
was added to perform the same task.

Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1653
Issue #1591
config/kernel-vfs-iterate.m4 [new file with mode: 0644]
config/kernel.m4
include/sys/zfs_vnops.h
include/sys/zpl.h
module/zfs/zfs_vnops.c
module/zfs/zpl_ctldir.c
module/zfs/zpl_file.c
module/zfs/zpl_xattr.c