From 328dd7b2dc2fca6b5cf82e0f432d55c02c59d277 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Mon, 15 Oct 2007 13:42:20 +0000 Subject: [PATCH] STABLE14-linux-2623-support-20071004 FIXES 70773 update for support for 2.6.23 (cherry picked from commit 127cebfacdaf84292fc1ecfd64c0e8d259aba474) --- acinclude.m4 | 12 ++++++++++++ src/afs/LINUX/osi_vfsops.c | 15 +++++++++++++++ src/afs/LINUX/osi_vnodeops.c | 2 +- src/cf/linux-test4.m4 | 31 +++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index 745086f0d..c4d07d7c5 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -582,6 +582,8 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) ) LINUX_KERNEL_COMPILE_WORKS + LINUX_HAVE_KMEM_CACHE_T + LINUX_KMEM_CACHE_CREATE_TAKES_DTOR LINUX_CONFIG_H_EXISTS LINUX_COMPLETION_H_EXISTS LINUX_DEFINES_FOR_EACH_PROCESS @@ -611,6 +613,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T LINUX_AOP_WRITEBACK_CONTROL LINUX_FS_STRUCT_FOP_HAS_FLOCK + LINUX_FS_STRUCT_FOP_HAS_SENDFILE LINUX_KERNEL_LINUX_SYSCALL_H LINUX_KERNEL_LINUX_SEQ_FILE_H LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG @@ -855,12 +858,21 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) if test "x$ac_cv_linux_fs_struct_fop_has_flock" = "xyes" ; then echo flock support is currently disabled in OpenAFS 1.4 for Linux fi + if test "x$ac_cv_linux_fs_struct_fop_has_sendfile" = "xyes" ; then + AC_DEFINE(STRUCT_FILE_OPERATIONS_HAS_SENDFILE, 1, [define if your struct file_operations has sendfile]) + fi if test "x$ac_cv_linux_register_sysctl_table_noflag" = "xyes" ; then AC_DEFINE(REGISTER_SYSCTL_TABLE_NOFLAG, 1, [define if register_sysctl_table has no insert_at head flag]) fi if test "x$ac_cv_linux_exports_tasklist_lock" = "xyes" ; then AC_DEFINE(EXPORTED_TASKLIST_LOCK, 1, [define if tasklist_lock exported]) fi + if test "x$ac_cv_linux_have_kmem_cache_t" = "xyes" ; then + AC_DEFINE(HAVE_KMEM_CACHE_T, 1, [define if kmem_cache_t exists]) + fi + if test "x$ac_cv_linux_have_kmem_cache_t" = "xyes" ; then + AC_DEFINE(KMEM_CACHE_TAKES_DTOR, 1, [define if kmem_cache_create takes a destructor argument]) + fi if test "x$ac_cv_linux_kernel_page_follow_link" = "xyes" -o "x$ac_cv_linux_func_i_put_link_takes_cookie" = "xyes"; then AC_DEFINE(USABLE_KERNEL_PAGE_SYMLINK_CACHE, 1, [define if your kernel has a usable symlink cache API]) else diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index 54b251d6e..ce75aec2b 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -263,7 +263,11 @@ afs_notify_change(struct dentry *dp, struct iattr *iattrp) #if defined(STRUCT_SUPER_HAS_ALLOC_INODE) +#if defined(HAVE_KMEM_CACHE_T) static kmem_cache_t *afs_inode_cachep; +#else +struct kmem_cache *afs_inode_cachep; +#endif static struct inode * afs_alloc_inode(struct super_block *sb) @@ -288,7 +292,11 @@ afs_destroy_inode(struct inode *inode) } static void +#if defined(HAVE_KMEM_CACHE_T) init_once(void * foo, kmem_cache_t * cachep, unsigned long flags) +#else +init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) +#endif { struct vcache *vcp = (struct vcache *) foo; @@ -306,10 +314,17 @@ afs_init_inodecache(void) #define SLAB_RECLAIM_ACCOUNT 0 #endif +#if defined(KMEM_CACHE_TAKES_DTOR) afs_inode_cachep = kmem_cache_create("afs_inode_cache", sizeof(struct vcache), 0, SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, init_once, NULL); +#else + afs_inode_cachep = kmem_cache_create("afs_inode_cache", + sizeof(struct vcache), + 0, SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, + init_once); +#endif if (afs_inode_cachep == NULL) return -ENOMEM; return 0; diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 136a0be12..a9da75655 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -640,7 +640,7 @@ struct file_operations afs_file_fops = { .mmap = afs_linux_mmap, .open = afs_linux_open, .flush = afs_linux_flush, -#ifdef AFS_LINUX26_ENV +#if defined(AFS_LINUX26_ENV) && defined(STRUCT_FILE_OPERATIONS_HAS_SENDFILE) .sendfile = generic_file_sendfile, #endif .release = afs_linux_release, diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 6b7522a34..3cb0ee0d9 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -863,3 +863,34 @@ fl_owner_t id; ac_cv_linux_func_f_flush_takes_fl_owner_t=no)]) AC_MSG_RESULT($ac_cv_linux_func_f_flush_takes_fl_owner_t)]) +AC_DEFUN([LINUX_HAVE_KMEM_CACHE_T], [ + AC_MSG_CHECKING([whether kmem_cache_t exists]) + AC_CACHE_VAL([ac_cv_linux_have_kmem_cache_t], [ + AC_TRY_KBUILD( +[#include ], +[kmem_cache_t *k;], + ac_cv_linux_have_kmem_cache_t=yes, + ac_cv_linux_have_kmem_cache_t=no)]) + AC_MSG_RESULT($ac_cv_linux_have_kmem_cache_t)]) + +AC_DEFUN([LINUX_KMEM_CACHE_CREATE_TAKES_DTOR], [ + AC_MSG_CHECKING([whether kmem_cache_create takes a destructor argument]) + AC_CACHE_VAL([ac_cv_linux_kmem_cache_create_takes_dtor], [ + AC_TRY_KBUILD( +[#include ], +[kmem_cache_create(NULL, 0, 0, 0, NULL, NULL);], + ac_cv_linux_kmem_cache_create_takes_dtor=yes, + ac_cv_linux_kmem_cache_create_takes_dtor=no)]) + AC_MSG_RESULT($ac_cv_linux_kmem_cache_create_takes_dtor)]) + +AC_DEFUN([LINUX_FS_STRUCT_FOP_HAS_SENDFILE], [ + AC_MSG_CHECKING([for sendfile in struct file_operations]) + AC_CACHE_VAL([ac_cv_linux_fs_struct_fop_has_sendfile], [ + AC_TRY_KBUILD( +[#include ], +[struct file_operations _fop; +_fop.sendfile(NULL, NULL, 0, 0, NULL);], + ac_cv_linux_fs_struct_fop_has_sendfile=yes, + ac_cv_linux_fs_struct_fop_has_sendfile=no)]) + AC_MSG_RESULT($ac_cv_linux_fs_struct_fop_has_sendfile)]) + -- 2.39.5