Re: Orangefs, v4.5 and the merge window...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Yay, Al, that did it, thanks!

I've tested, and updated the for-next branch at kernel.org...

Linus, if it is not too late, can you pull from:

git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux.git
for-next

-Mike

On Sat, Mar 26, 2016 at 12:30 AM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote:
> On Fri, Mar 25, 2016 at 11:55:31PM -0400, Mike Marshall wrote:
>
>> I'll look to see if I can see it, I guess it has something to
>> do with Al's superblock re-do...
>
> It does; with this approach you would need to add ORANGEFS_VFS_OP_FS_UNMOUNT
> to the whitelist in orangefs_devreq_read() - the
>                                    !(op->upcall.type ==
>                                         ORANGEFS_VFS_OP_FS_MOUNT ||
>                                      op->upcall.type ==
>                                         ORANGEFS_VFS_OP_GETATTR)) {
> thing.  Sorry, should've thought about that...
>
> Alternatively, we could do orangefs_unmount_sb(sb) before removing from
> the list, and add mutex_lock/mutex_unlock of request_mutex right before
> that kfree() in the very end.  Same effect in terms of list protection and
> closer to your current logics.
>
> Try this incremental (to be folded into "fix orangefs_superblock locking"):
>
> diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
> index bf78870..bb3dc14 100644
> --- a/fs/orangefs/super.c
> +++ b/fs/orangefs/super.c
> @@ -514,6 +514,12 @@ void orangefs_kill_sb(struct super_block *sb)
>         /* provided sb cleanup */
>         kill_anon_super(sb);
>
> +       /*
> +        * issue the unmount to userspace to tell it to remove the
> +        * dynamic mount info it has for this superblock
> +        */
> +       orangefs_unmount_sb(sb);
> +
>         /* remove the sb from our list of orangefs specific sb's */
>
>         spin_lock(&orangefs_superblocks_lock);
> @@ -522,10 +528,11 @@ void orangefs_kill_sb(struct super_block *sb)
>         spin_unlock(&orangefs_superblocks_lock);
>
>         /*
> -        * issue the unmount to userspace to tell it to remove the
> -        * dynamic mount info it has for this superblock
> +        * make sure that ORANGEFS_DEV_REMOUNT_ALL loop that might've seen us
> +        * gets completed before we free the damn thing.
>          */
> -       orangefs_unmount_sb(sb);
> +       mutex_lock(&request_mutex);
> +       mutex_unlock(&request_mutex);
>
>         /* free the orangefs superblock private data */
>         kfree(ORANGEFS_SB(sb));
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux