[PATCH 3/5] vfs: add flag to allow rename to same inode
From: Miklos Szeredi
Date: Thu Aug 26 2010 - 14:35:48 EST
From: Miklos Szeredi <mszeredi@xxxxxxx>
Hybrid union filesystem uses dummy inodes for non-directories. Allow
rename to work in this case despite the inode being the same.
Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxx>
---
fs/namei.c | 4 +++-
include/linux/fs.h | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
Index: linux-2.6/include/linux/fs.h
===================================================================
--- linux-2.6.orig/include/linux/fs.h 2010-08-25 14:19:34.000000000 +0200
+++ linux-2.6/include/linux/fs.h 2010-08-25 14:19:53.000000000 +0200
@@ -179,6 +179,7 @@ struct inodes_stat_t {
#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move()
* during rename() internally.
*/
+#define FS_RENAME_SELF_ALLOW 65536 /* Allow rename to same inode */
/*
* These are the fs-independent mount-flags: up to 32 flags are supported
Index: linux-2.6/fs/namei.c
===================================================================
--- linux-2.6.orig/fs/namei.c 2010-08-25 10:19:53.000000000 +0200
+++ linux-2.6/fs/namei.c 2010-08-25 14:22:56.000000000 +0200
@@ -2620,8 +2620,10 @@ int vfs_rename(struct inode *old_dir, st
int is_dir = S_ISDIR(old_dentry->d_inode->i_mode);
const unsigned char *old_name;
- if (old_dentry->d_inode == new_dentry->d_inode)
+ if (old_dentry->d_inode == new_dentry->d_inode &&
+ !(old_dir->i_sb->s_type->fs_flags & FS_RENAME_SELF_ALLOW)) {
return 0;
+ }
error = may_delete(old_dir, old_dentry, is_dir);
if (error)
--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/