Re: [PATCH 3/7 v3] vfs: add flag to allow rename to same inode

From: Valerie Aurora
Date: Thu Sep 23 2010 - 18:05:00 EST


On Mon, Sep 20, 2010 at 08:04:07PM +0200, Miklos Szeredi wrote:
> From: Miklos Szeredi <mszeredi@xxxxxxx>
>
> The overlay 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)
>

Perhaps a note in the commit message to say that the (inode == inode)
check on the lower layer is done when overlayfs calls vfs_rename() on
the targets?

What other issues arise with dummy inodes?

-VAL
--
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/