From 4952df3f0359531e4a660c99c94c51eb0b169f59 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Sat, 29 Oct 2011 19:23:07 -0400 Subject: [PATCH] Linux: 3.1: update RCU path walking detection in permission i_op The permission() inode operation changed again with kernel 3.1, back to the form it had before 2.6.38. This compiles fine, but is missing the new way of detecting when we get called in RCU path walking mode, resulting in system hangs. Change-Id: I9a9a0c13aa3b35d8fe2bd592e2bca8187eacacc5 Reviewed-on: http://gerrit.openafs.org/5740 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/afs/LINUX/osi_vnodeops.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index f37acb879..18be0ffa1 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -2354,10 +2354,13 @@ afs_linux_permission(struct inode *ip, int mode) cred_t *credp; int tmp = 0; + /* Check for RCU path walking */ #if defined(IOP_PERMISSION_TAKES_FLAGS) - /* We don't support RCU path walking */ if (flags & IPERM_FLAG_RCU) return -ECHILD; +#elif defined(MAY_NOT_BLOCK) + if (mode & MAY_NOT_BLOCK) + return -ECHILD; #endif credp = crref(); -- 2.39.5