From 78ed7fb4a0d0e2fd38bc5ad62043169742b573b3 Mon Sep 17 00:00:00 2001 From: Russ Allbery Date: Tue, 12 Jun 2007 18:41:41 +0000 Subject: [PATCH] * Apply upstream patches for Linux 2.6.22 support. (Closes: #428401) * Apply upstream patch to fix the AFS /proc structure under Linux 2.6.22.1 and later. --- acinclude.m4 | 8 ++++ debian/changelog | 5 ++- src/afs/LINUX/osi_sleep.c | 8 ++++ src/afs/LINUX/osi_sysctl.c | 81 ++++++++++++++++++++++++------------ src/afs/LINUX/osi_vfsops.c | 2 + src/afs/LINUX/osi_vnodeops.c | 6 +-- src/cf/linux-test4.m4 | 23 ++++++++++ src/rx/LINUX/rx_kmutex.c | 4 ++ src/rx/LINUX/rx_knet.c | 4 ++ 9 files changed, 111 insertions(+), 30 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 8209ee634..d7ee559da 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -611,6 +611,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_FS_STRUCT_FOP_HAS_FLOCK LINUX_KERNEL_LINUX_SYSCALL_H LINUX_KERNEL_LINUX_SEQ_FILE_H + LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG LINUX_KERNEL_SELINUX LINUX_KERNEL_SOCK_CREATE LINUX_KERNEL_PAGE_FOLLOW_LINK @@ -626,6 +627,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_EXIT_STATE LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_TGID LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_TODO + LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_THREAD_INFO LINUX_EXPORTS_TASKLIST_LOCK LINUX_GET_SB_HAS_STRUCT_VFSMOUNT LINUX_STATFS_TAKES_DENTRY @@ -767,6 +769,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then AC_DEFINE(RECALC_SIGPENDING_TAKES_VOID, 1, [define if your recalc_sigpending takes void]) fi + if test "x$ac_cv_linux_kernel_posix_lock_file_wait_arg" = "xyes" ; then + AC_DEFINE(POSIX_LOCK_FILE_WAIT_ARG, 1, [define if your linux kernel uses 3 arguments for posix_lock_file]) + fi if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then AC_DEFINE(LINUX_KERNEL_IS_SELINUX, 1, [define if your linux kernel uses SELinux features]) fi @@ -812,6 +817,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) if test "x$ac_cv_linux_sched_struct_task_struct_has_todo" = "xyes"; then AC_DEFINE(STRUCT_TASK_STRUCT_HAS_TODO, 1, [define if your struct task_struct has todo]) fi + if test "x$ac_cv_linux_sched_struct_task_struct_has_thread_info" = "xyes"; then + AC_DEFINE(STRUCT_TASK_STRUCT_HAS_THREAD_INFO, 1, [define if your struct task_struct has thread_info]) + fi if test "x$ac_cv_linux_get_sb_has_struct_vfsmount" = "xyes"; then AC_DEFINE(GET_SB_HAS_STRUCT_VFSMOUNT, 1, [define if your get_sb_nodev needs a struct vfsmount argument]) fi diff --git a/debian/changelog b/debian/changelog index c4fa93bab..adb15fa50 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,11 +2,14 @@ openafs (1.4.4.dfsg1-4) UNRELEASED; urgency=low * Apply upstream patch from Jeffrey Hutzelman to fix kernel module builds on ppc64. (Closes: #427555) + * Apply upstream patches for Linux 2.6.22 support. (Closes: #428401) + * Apply upstream patch to fix the AFS /proc structure under Linux + 2.6.22.1 and later. * Go back to using krb5-config. The dependency problem has now been fixed on all platforms in the krb5 package and this is the preferred upstream method. - -- Russ Allbery Mon, 04 Jun 2007 20:59:15 -0700 + -- Russ Allbery Tue, 12 Jun 2007 11:43:54 -0700 openafs (1.4.4.dfsg1-3) unstable; urgency=low diff --git a/src/afs/LINUX/osi_sleep.c b/src/afs/LINUX/osi_sleep.c index b9594c0f7..5a862f7fd 100644 --- a/src/afs/LINUX/osi_sleep.c +++ b/src/afs/LINUX/osi_sleep.c @@ -205,7 +205,11 @@ afs_osi_SleepSig(void *event) #if defined(STRUCT_TASK_STRUCT_HAS_TODO) !current->todo #else +#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) test_ti_thread_flag(current->thread_info, TIF_FREEZE) +#else + test_ti_thread_flag(task_thread_info(current), TIF_FREEZE) +#endif #endif #endif ) @@ -304,7 +308,11 @@ osi_TimedSleep(char *event, afs_int32 ams, int aintok) #if defined(STRUCT_TASK_STRUCT_HAS_TODO) !current->todo #else +#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) test_ti_thread_flag(current->thread_info, TIF_FREEZE) +#else + test_ti_thread_flag(task_thread_info(current), TIF_FREEZE) +#endif #endif #endif ) diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c index 580a10e0b..56c0bcb8c 100644 --- a/src/afs/LINUX/osi_sysctl.c +++ b/src/afs/LINUX/osi_sysctl.c @@ -1,7 +1,7 @@ /* * osi_sysctl.c: Linux sysctl interface to OpenAFS * - * $Id: osi_sysctl.c,v 1.7.2.4 2007/02/22 21:49:01 shadow Exp $ + * $Id: osi_sysctl.c,v 1.7.2.5 2007/06/12 18:28:49 shadow Exp $ * * Written Jan 30, 2002 by Kris Van Hees (Sine Nomine Associates) */ @@ -27,35 +27,64 @@ extern afs_int32 hm_retry_int; static struct ctl_table_header *afs_sysctl = NULL; static ctl_table afs_sysctl_table[] = { - {1, "hm_retry_RO", - &hm_retry_RO, sizeof(afs_int32), 0644, NULL, - &proc_dointvec} - , - {2, "hm_retry_RW", - &hm_retry_RW, sizeof(afs_int32), 0644, NULL, - &proc_dointvec} - , - {3, "hm_retry_int", - &hm_retry_int, sizeof(afs_int32), 0644, NULL, - &proc_dointvec} - , - {4, "GCPAGs", - &afs_gcpags, sizeof(afs_int32), 0644, NULL, - &proc_dointvec} - , - {5, "rx_deadtime", - &afs_rx_deadtime, sizeof(afs_int32), 0644, NULL, - &proc_dointvec} - , - {6, "bkVolPref", - &afs_bkvolpref, sizeof(afs_int32), 0644, NULL, - &proc_dointvec} - , + { + .ctl_name = 1, + .procname = "hm_retry_RO", + .data = &hm_retry_RO, + .maxlen = sizeof(afs_int32), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = 2, + .procname = "hm_retry_RW", + .data = &hm_retry_RW, + .maxlen = sizeof(afs_int32), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = 3, + .procname = "hm_retry_int", + .data = &hm_retry_int, + .maxlen = sizeof(afs_int32), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = 4, + .procname = "GCPAGs", + .data = &afs_gcpags, + .maxlen = sizeof(afs_int32), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = 5, + .procname = "rx_deadtime", + .data = &afs_rx_deadtime, + .maxlen = sizeof(afs_int32), + .mode = 0644, + .proc_handler = &proc_dointvec + }, + { + .ctl_name = 6, + .procname = "bkVolPref", + .data = &afs_bkvolpref, + .maxlen = sizeof(afs_int32), + .mode = 0644, + .proc_handler = &proc_dointvec + }, {0} }; static ctl_table fs_sysctl_table[] = { - {1, "afs", NULL, 0, 0555, afs_sysctl_table}, + { + .ctl_name = 1, + .procname = "afs", + .mode = 0555, + .child = afs_sysctl_table + }, {0} }; diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index b9ad8d2f6..1e01cd7a3 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -292,8 +292,10 @@ init_once(void * foo, kmem_cache_t * cachep, unsigned long flags) { struct vcache *vcp = (struct vcache *) foo; +#if defined(SLAB_CTOR_VERIFY) if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == SLAB_CTOR_CONSTRUCTOR) +#endif inode_init_once(AFSTOV(vcp)); } diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 7c761b617..108e63db5 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -473,11 +473,11 @@ afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp) #ifdef AFS_LINUX24_ENV if ((code == 0 || flp->fl_type == F_UNLCK) && (cmd == F_SETLK || cmd == F_SETLKW)) { -#ifdef AFS_LINUX26_ENV +#ifdef POSIX_LOCK_FILE_WAIT_ARG + code = posix_lock_file(fp, flp, 0); +#else flp->fl_flags &=~ FL_SLEEP; code = posix_lock_file(fp, flp); -#else - code = posix_lock_file(fp, flp, 0); #endif if (code && flp->fl_type != F_UNLCK) { struct AFS_FLOCK flock2; diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 653464fb6..cc6908c84 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -444,6 +444,18 @@ printk("%d\n", _tsk.exit_state);], AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_exit_state)]) +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_THREAD_INFO], [ + AC_MSG_CHECKING([for thread_info in struct task_struct]) + AC_CACHE_VAL([ac_cv_linux_sched_struct_task_struct_has_thread_info], [ + AC_TRY_KBUILD( +[#include ], +[struct task_struct _tsk; +printk("%d\n", _tsk.thread_info);], + ac_cv_linux_sched_struct_task_struct_has_thread_info=yes, + ac_cv_linux_sched_struct_task_struct_has_thread_info=no)]) + AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_thread_info)]) + + AC_DEFUN([LINUX_FS_STRUCT_SUPER_HAS_ALLOC_INODE], [ AC_MSG_CHECKING([for alloc_inode in struct super_operations]) AC_CACHE_VAL([ac_cv_linux_fs_struct_super_has_alloc_inode], [ @@ -456,6 +468,17 @@ printk("%p\n", _super.alloc_inode);], AC_MSG_RESULT($ac_cv_linux_fs_struct_super_has_alloc_inode)]) +AC_DEFUN([LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG], [ + AC_MSG_CHECKING([for 3rd argument in posix_lock_file found in new kernels]) + AC_CACHE_VAL([ac_cv_linux_kernel_posix_lock_file_wait_arg], [ + AC_TRY_KBUILD( +[#include ], +[posix_lock_file(0,0,0);], + ac_cv_linux_kernel_posix_lock_file_wait_arg=yes, + ac_cv_linux_kernel_posix_lock_file_wait_arg=no)]) + AC_MSG_RESULT($ac_cv_linux_kernel_posix_lock_file_wait_arg)]) + + AC_DEFUN([LINUX_KERNEL_SOCK_CREATE], [ AC_MSG_CHECKING([for 5th argument in sock_create found in some SELinux kernels]) AC_CACHE_VAL([ac_cv_linux_kernel_sock_create_v], [ diff --git a/src/rx/LINUX/rx_kmutex.c b/src/rx/LINUX/rx_kmutex.c index 9dc88fb17..1732f9089 100644 --- a/src/rx/LINUX/rx_kmutex.c +++ b/src/rx/LINUX/rx_kmutex.c @@ -123,7 +123,11 @@ afs_cv_wait(afs_kcondvar_t * cv, afs_kmutex_t * l, int sigok) #if defined(STRUCT_TASK_STRUCT_HAS_TODO) !current->todo #else +#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) test_ti_thread_flag(current->thread_info, TIF_FREEZE) +#else + test_ti_thread_flag(task_thread_info(current), TIF_FREEZE) +#endif #endif #endif ) diff --git a/src/rx/LINUX/rx_knet.c b/src/rx/LINUX/rx_knet.c index 8fbb280e3..967159edb 100644 --- a/src/rx/LINUX/rx_knet.c +++ b/src/rx/LINUX/rx_knet.c @@ -173,7 +173,11 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *from, struct iovec *iov, #if defined(STRUCT_TASK_STRUCT_HAS_TODO) !current->todo #else +#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) test_ti_thread_flag(current->thread_info, TIF_FREEZE) +#else + test_ti_thread_flag(task_thread_info(current), TIF_FREEZE) +#endif #endif #endif ) -- 2.39.5