Louis Rilling
2008-Jun-27 11:10 UTC
[Ocfs2-devel] [BUGFIX][PATCH] configfs: Fix open directory making rmdir() fail
When checking for user-created elements under an item to be removed by rmdir(), configfs_detach_prep() counts fake configfs_dirents created by dir_open() as user-created and fails when finding one. It is however perfectly valid to remove a directory that is open. Simply make configfs_detach_prep() skip fake configfs_dirent, like it already does for attributes, and like detach_groups() does. Signed-off-by: Louis Rilling <louis.rilling at kerlabs.com> --- fs/configfs/dir.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c index 2c873fd..e721fd5 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c @@ -379,7 +379,8 @@ static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex ret = 0; list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { - if (sd->s_type & CONFIGFS_NOT_PINNED) + if (!sd->s_element || + (sd->s_type & CONFIGFS_NOT_PINNED)) continue; if (sd->s_type & CONFIGFS_USET_DEFAULT) { /* Abort if racing with mkdir() */ -- 1.5.5.3
Joel Becker
2008-Jul-03 22:08 UTC
[Ocfs2-devel] [BUGFIX][PATCH] configfs: Fix open directory making rmdir() fail
On Fri, Jun 27, 2008 at 01:10:25PM +0200, Louis Rilling wrote:> When checking for user-created elements under an item to be removed by rmdir(), > configfs_detach_prep() counts fake configfs_dirents created by dir_open() as > user-created and fails when finding one. It is however perfectly valid to remove > a directory that is open. > > Simply make configfs_detach_prep() skip fake configfs_dirent, like it already > does for attributes, and like detach_groups() does.This looks good.> Signed-off-by: Louis Rilling <louis.rilling at kerlabs.com> > --- > fs/configfs/dir.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c > index 2c873fd..e721fd5 100644 > --- a/fs/configfs/dir.c > +++ b/fs/configfs/dir.c > @@ -379,7 +379,8 @@ static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex > > ret = 0; > list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { > - if (sd->s_type & CONFIGFS_NOT_PINNED) > + if (!sd->s_element || > + (sd->s_type & CONFIGFS_NOT_PINNED)) > continue; > if (sd->s_type & CONFIGFS_USET_DEFAULT) { > /* Abort if racing with mkdir() */ > -- > 1.5.5.3 >-- "You can get more with a kind word and a gun than you can with a kind word alone." - Al Capone Joel Becker Principal Software Developer Oracle E-mail: joel.becker at oracle.com Phone: (650) 506-8127