> @@ -327,7 +514,30 @@ static struct vfsmount *clone_mnt(struct
>  
>  static inline void __mntput(struct vfsmount *mnt)
>  {
> +     int cpu;
>       struct super_block *sb = mnt->mnt_sb;
> +     /*
> +      * We don't have to hold all of the locks at the
> +      * same time here because we know that we're the
> +      * last reference to mnt and that no new writers
> +      * can come in.
> +      */
> +     for_each_possible_cpu(cpu) {
> +             struct mnt_writer *cpu_writer = &per_cpu(mnt_writers, cpu);
> +             if (cpu_writer->mnt != mnt)
> +                     continue;
> +             spin_lock(&cpu_writer->lock);
> +             atomic_add(cpu_writer->count, &mnt->__mnt_writers);
> +             cpu_writer->count = 0;

I think you should also add a

                cpu_writer->mnt = NULL;

here.  It's not a bug, but I had to think a bit about why it's not a bug.

Miklos
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to