aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2014-03-17 07:06:58 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-03-17 15:14:17 -0400
commitf7be728468263fcbaa1e9dcae83fb97a88b4127c (patch)
tree778750a4e2eb18c2a84e0514dd3fa88afbb0a858 /fs
parent33912be816d96e204ed7a93690552daa39c08ea9 (diff)
nfs: emit a fsnotify_nameremove call in sillyrename codepath
If a file is sillyrenamed, then the generic vfs_unlink code will skip emitting fsnotify events for it. This patch has the sillyrename code do that instead. In truth this is a little bit odd since we aren't actually removing the dentry per-se, but renaming it. Still, this is probably the right thing to do since it's what userland apps expect to see when an unlink() occurs or some file is renamed on top of the dentry. Signed-off-by: Jeff Layton <jlayton@redhat.com> Tested-by: Anna Schumaker <Anna.Schumaker@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/unlink.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c
index 818ded7b7b74..de54129336c6 100644
--- a/fs/nfs/unlink.c
+++ b/fs/nfs/unlink.c
@@ -14,6 +14,7 @@
14#include <linux/sched.h> 14#include <linux/sched.h>
15#include <linux/wait.h> 15#include <linux/wait.h>
16#include <linux/namei.h> 16#include <linux/namei.h>
17#include <linux/fsnotify.h>
17 18
18#include "internal.h" 19#include "internal.h"
19#include "nfs4_fs.h" 20#include "nfs4_fs.h"
@@ -465,8 +466,18 @@ nfs_async_rename(struct inode *old_dir, struct inode *new_dir,
465static void 466static void
466nfs_complete_sillyrename(struct rpc_task *task, struct nfs_renamedata *data) 467nfs_complete_sillyrename(struct rpc_task *task, struct nfs_renamedata *data)
467{ 468{
468 if (task->tk_status != 0) 469 struct dentry *dentry = data->old_dentry;
469 nfs_cancel_async_unlink(data->old_dentry); 470
471 if (task->tk_status != 0) {
472 nfs_cancel_async_unlink(dentry);
473 return;
474 }
475
476 /*
477 * vfs_unlink and the like do not issue this when a file is
478 * sillyrenamed, so do it here.
479 */
480 fsnotify_nameremove(dentry, 0);
470} 481}
471 482
472#define SILLYNAME_PREFIX ".nfs" 483#define SILLYNAME_PREFIX ".nfs"