All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] NFS: Fixes for nfs4_proc_mkdir() error handling
@ 2025-05-16 15:00 Anna Schumaker
  2025-05-16 15:14 ` Jeff Layton
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Anna Schumaker @ 2025-05-16 15:00 UTC (permalink / raw)
  To: linux-nfs, trond.myklebust; +Cc: anna

From: Anna Schumaker <anna.schumaker@oracle.com>

The PTR_ERR_OR_ZERO() macro uses IS_ERR(), which checks if an error
value is a valid Linux error code. It does not take into account NFS
error codes, which are well out of the range of MAX_ERRNO. So if
_nfs4_proc_mkdir() returns -NFS4ERR_DELAY (which xfstests generic/477 was
able to consistently hit while running against a Hammerspace server),
PTR_ERR_OR_ZERO() will happily say "no, that's not an error", so we
propagate it up to the VFS who then tries to dput() it.

Naturally, the kernel doesn't like this:

[  247.669307] BUG: unable to handle page fault for address: ffffffffffffd968
[  247.690824] RIP: 0010:lockref_put_return+0x67/0x130
[  247.719037] Call Trace:
[  247.719446]  <TASK>
[  247.719806]  ? __pfx_lockref_put_return+0x10/0x10
[  247.720538]  ? _raw_spin_unlock+0x15/0x30
[  247.721173]  ? dput+0x179/0x490
[  247.721682]  ? vfs_mkdir+0x475/0x780
[  247.722259]  dput+0x30/0x490
[  247.722730]  do_mkdirat+0x158/0x310
[  247.723292]  ? __pfx_do_mkdirat+0x10/0x10
[  247.723928]  __x64_sys_mkdir+0xd3/0x160
[  247.724531]  do_syscall_64+0x4b/0x120
[  247.725131]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  247.725914] RIP: 0033:0x7fe0e22f3ddb

While I was in the area, I noticed that we're discarding any errors left
unhandled by nfs4_handle_exception(). This patch fixes both of these
issues.

Fixes: 8376583b84a1 ("nfs: change mkdir inode_operation to return alternate dentry if needed.")
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
---
 fs/nfs/nfs4proc.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index c7e068b563ff..306dade146e6 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5274,13 +5274,17 @@ static struct dentry *nfs4_proc_mkdir(struct inode *dir, struct dentry *dentry,
 		sattr->ia_mode &= ~current_umask();
 	do {
 		alias = _nfs4_proc_mkdir(dir, dentry, sattr, label);
-		err = PTR_ERR_OR_ZERO(alias);
+		err = PTR_ERR(alias);
+		if (err > 0)
+			err = 0;
 		trace_nfs4_mkdir(dir, &dentry->d_name, err);
 		err = nfs4_handle_exception(NFS_SERVER(dir), err,
 				&exception);
 	} while (exception.retry);
 	nfs4_label_release_security(label);
 
+	if (err != 0)
+		return ERR_PTR(err);
 	return alias;
 }
 
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread
* Re: [PATCH] NFS: Fixes for nfs4_proc_mkdir() error handling
  2025-05-16 15:00 [PATCH] NFS: Fixes for nfs4_proc_mkdir() error handling Anna Schumaker
@ 2025-05-23  8:35 ` Dan Carpenter
  2025-05-21 19:35 ` Jeff Layton
  2025-05-21 23:20 ` NeilBrown
  2 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2025-05-18  4:10 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20250516150010.61641-1-anna@kernel.org>
References: <20250516150010.61641-1-anna@kernel.org>
TO: Anna Schumaker <anna@kernel.org>
TO: linux-nfs@vger.kernel.org
TO: trond.myklebust@hammerspace.com
CC: anna@kernel.org

Hi Anna,

kernel test robot noticed the following build warnings:

[auto build test WARNING on trondmy-nfs/linux-next]
[also build test WARNING on linus/master v6.15-rc6 next-20250516]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Anna-Schumaker/NFS-Fixes-for-nfs4_proc_mkdir-error-handling/20250516-231124
base:   git://git.linux-nfs.org/projects/trondmy/linux-nfs.git linux-next
patch link:    https://lore.kernel.org/r/20250516150010.61641-1-anna%40kernel.org
patch subject: [PATCH] NFS: Fixes for nfs4_proc_mkdir() error handling
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: i386-randconfig-141-20250517 (https://download.01.org/0day-ci/archive/20250518/202505181116.RhlCb75I-lkp@intel.com/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202505181116.RhlCb75I-lkp@intel.com/

New smatch warnings:
fs/nfs/nfs4proc.c:5277 nfs4_proc_mkdir() warn: passing zero to 'PTR_ERR'

Old smatch warnings:
fs/nfs/nfs4proc.c:1471 nfs4_opendata_alloc() error: we previously assumed 'c' could be null (see line 1439)

vim +/PTR_ERR +5277 fs/nfs/nfs4proc.c

^1da177e4c3f41 Linus Torvalds      2005-04-16  5259  
8376583b84a193 NeilBrown           2025-02-27  5260  static struct dentry *nfs4_proc_mkdir(struct inode *dir, struct dentry *dentry,
^1da177e4c3f41 Linus Torvalds      2005-04-16  5261  				      struct iattr *sattr)
^1da177e4c3f41 Linus Torvalds      2005-04-16  5262  {
dff25ddb48086a Andreas Gruenbacher 2016-12-02  5263  	struct nfs_server *server = NFS_SERVER(dir);
0688e64bc60038 Trond Myklebust     2019-04-07  5264  	struct nfs4_exception exception = {
0688e64bc60038 Trond Myklebust     2019-04-07  5265  		.interruptible = true,
0688e64bc60038 Trond Myklebust     2019-04-07  5266  	};
c528f70f504434 Trond Myklebust     2022-10-19  5267  	struct nfs4_label l, *label;
8376583b84a193 NeilBrown           2025-02-27  5268  	struct dentry *alias;
^1da177e4c3f41 Linus Torvalds      2005-04-16  5269  	int err;
a8a5da996df7d2 Aneesh Kumar K.V    2010-12-09  5270  
aa9c2669626ca7 David Quigley       2013-05-22  5271  	label = nfs4_label_init_security(dir, dentry, sattr, &l);
aa9c2669626ca7 David Quigley       2013-05-22  5272  
dff25ddb48086a Andreas Gruenbacher 2016-12-02  5273  	if (!(server->attr_bitmask[2] & FATTR4_WORD2_MODE_UMASK))
a8a5da996df7d2 Aneesh Kumar K.V    2010-12-09  5274  		sattr->ia_mode &= ~current_umask();
^1da177e4c3f41 Linus Torvalds      2005-04-16  5275  	do {
8376583b84a193 NeilBrown           2025-02-27  5276  		alias = _nfs4_proc_mkdir(dir, dentry, sattr, label);
4c35d65f4c6f1e Anna Schumaker      2025-05-16 @5277  		err = PTR_ERR(alias);
4c35d65f4c6f1e Anna Schumaker      2025-05-16  5278  		if (err > 0)
4c35d65f4c6f1e Anna Schumaker      2025-05-16  5279  			err = 0;
078ea3dfe396b1 Trond Myklebust     2013-08-12  5280  		trace_nfs4_mkdir(dir, &dentry->d_name, err);
078ea3dfe396b1 Trond Myklebust     2013-08-12  5281  		err = nfs4_handle_exception(NFS_SERVER(dir), err,
^1da177e4c3f41 Linus Torvalds      2005-04-16  5282  				&exception);
^1da177e4c3f41 Linus Torvalds      2005-04-16  5283  	} while (exception.retry);
aa9c2669626ca7 David Quigley       2013-05-22  5284  	nfs4_label_release_security(label);
aa9c2669626ca7 David Quigley       2013-05-22  5285  
4c35d65f4c6f1e Anna Schumaker      2025-05-16  5286  	if (err != 0)
4c35d65f4c6f1e Anna Schumaker      2025-05-16  5287  		return ERR_PTR(err);
8376583b84a193 NeilBrown           2025-02-27  5288  	return alias;
^1da177e4c3f41 Linus Torvalds      2005-04-16  5289  }
^1da177e4c3f41 Linus Torvalds      2005-04-16  5290  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-05-23  8:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-16 15:00 [PATCH] NFS: Fixes for nfs4_proc_mkdir() error handling Anna Schumaker
2025-05-16 15:14 ` Jeff Layton
2025-05-21 19:35 ` Jeff Layton
2025-05-21 23:20 ` NeilBrown
  -- strict thread matches above, loose matches on Subject: below --
2025-05-18  4:10 kernel test robot
2025-05-23  8:35 ` Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.