diff options
Diffstat (limited to 'config/kernel-put-link.m4')
-rw-r--r-- | config/kernel-put-link.m4 | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/config/kernel-put-link.m4 b/config/kernel-put-link.m4 new file mode 100644 index 000000000000..4234861f3347 --- /dev/null +++ b/config/kernel-put-link.m4 @@ -0,0 +1,61 @@ +dnl # +dnl # Supported symlink APIs +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_PUT_LINK], [ + ZFS_LINUX_TEST_SRC([put_link_cookie], [ + #include <linux/fs.h> + void put_link(struct inode *ip, void *cookie) + { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + ],[]) + + ZFS_LINUX_TEST_SRC([put_link_nameidata], [ + #include <linux/fs.h> + void put_link(struct dentry *de, struct + nameidata *nd, void *ptr) { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + ],[]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_PUT_LINK], [ + dnl # + dnl # 4.5 API change + dnl # get_link() uses delayed done, there is no put_link() interface. + dnl # This check initially uses the inode_operations_get_link result + dnl # + ZFS_LINUX_TEST_RESULT([inode_operations_get_link], [ + AC_DEFINE(HAVE_PUT_LINK_DELAYED, 1, [iops->put_link() delayed]) + ],[ + dnl # + dnl # 4.2 API change + dnl # This kernel retired the nameidata structure. + dnl # + AC_MSG_CHECKING([whether iops->put_link() passes cookie]) + ZFS_LINUX_TEST_RESULT([put_link_cookie], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PUT_LINK_COOKIE, 1, + [iops->put_link() cookie]) + ],[ + AC_MSG_RESULT(no) + + dnl # + dnl # 2.6.32 API + dnl # + AC_MSG_CHECKING( + [whether iops->put_link() passes nameidata]) + ZFS_LINUX_TEST_RESULT([put_link_nameidata], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PUT_LINK_NAMEIDATA, 1, + [iops->put_link() nameidata]) + ],[ + ZFS_LINUX_TEST_ERROR([put_link]) + ]) + ]) + ]) +]) |