1dnl # 2dnl # Supported get_link() interfaces checked newest to oldest. 3dnl # Note this interface used to be named follow_link. 4dnl # 5AC_DEFUN([ZFS_AC_KERNEL_SRC_GET_LINK], [ 6 ZFS_LINUX_TEST_SRC([inode_operations_get_link], [ 7 #include <linux/fs.h> 8 static const char *get_link(struct dentry *de, struct inode *ip, 9 struct delayed_call *done) { return "symlink"; } 10 static struct inode_operations 11 iops __attribute__ ((unused)) = { 12 .get_link = get_link, 13 }; 14 ],[]) 15 16 ZFS_LINUX_TEST_SRC([inode_operations_get_link_cookie], [ 17 #include <linux/fs.h> 18 static const char *get_link(struct dentry *de, struct 19 inode *ip, void **cookie) { return "symlink"; } 20 static struct inode_operations 21 iops __attribute__ ((unused)) = { 22 .get_link = get_link, 23 }; 24 ],[]) 25 26 ZFS_LINUX_TEST_SRC([inode_operations_follow_link], [ 27 #include <linux/fs.h> 28 static const char *follow_link(struct dentry *de, 29 void **cookie) { return "symlink"; } 30 static struct inode_operations 31 iops __attribute__ ((unused)) = { 32 .follow_link = follow_link, 33 }; 34 ],[]) 35 36 ZFS_LINUX_TEST_SRC([inode_operations_follow_link_nameidata], [ 37 #include <linux/fs.h> 38 static void *follow_link(struct dentry *de, struct 39 nameidata *nd) { return (void *)NULL; } 40 static struct inode_operations 41 iops __attribute__ ((unused)) = { 42 .follow_link = follow_link, 43 }; 44 ],[]) 45]) 46 47AC_DEFUN([ZFS_AC_KERNEL_GET_LINK], [ 48 dnl # 49 dnl # 4.5 API change 50 dnl # The get_link interface has added a delayed done call and 51 dnl # used it to retire the put_link() interface. 52 dnl # 53 AC_MSG_CHECKING([whether iops->get_link() passes delayed]) 54 ZFS_LINUX_TEST_RESULT([inode_operations_get_link], [ 55 AC_MSG_RESULT(yes) 56 AC_DEFINE(HAVE_GET_LINK_DELAYED, 1, [iops->get_link() delayed]) 57 ],[ 58 AC_MSG_RESULT(no) 59 60 dnl # 61 dnl # 4.5 API change 62 dnl # The follow_link() interface has been replaced by 63 dnl # get_link() which behaves the same as before except: 64 dnl # - An inode is passed as a separate argument 65 dnl # - When called in RCU mode a NULL dentry is passed. 66 dnl # 67 AC_MSG_CHECKING([whether iops->get_link() passes cookie]) 68 ZFS_LINUX_TEST_RESULT([inode_operations_get_link_cookie], [ 69 AC_MSG_RESULT(yes) 70 AC_DEFINE(HAVE_GET_LINK_COOKIE, 1, 71 [iops->get_link() cookie]) 72 ],[ 73 AC_MSG_RESULT(no) 74 75 dnl # 76 dnl # 4.2 API change 77 dnl # This kernel retired the nameidata structure. 78 dnl # 79 AC_MSG_CHECKING( 80 [whether iops->follow_link() passes cookie]) 81 ZFS_LINUX_TEST_RESULT([inode_operations_follow_link], [ 82 AC_MSG_RESULT(yes) 83 AC_DEFINE(HAVE_FOLLOW_LINK_COOKIE, 1, 84 [iops->follow_link() cookie]) 85 ],[ 86 AC_MSG_RESULT(no) 87 88 dnl # 89 dnl # 2.6.32 API 90 dnl # 91 AC_MSG_CHECKING( 92 [whether iops->follow_link() passes nameidata]) 93 ZFS_LINUX_TEST_RESULT( 94 [inode_operations_follow_link_nameidata],[ 95 AC_MSG_RESULT(yes) 96 AC_DEFINE(HAVE_FOLLOW_LINK_NAMEIDATA, 1, 97 [iops->follow_link() nameidata]) 98 ],[ 99 ZFS_LINUX_TEST_ERROR([get_link]) 100 ]) 101 ]) 102 ]) 103 ]) 104]) 105