[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.64.1210260900170.24474@file.rdu.redhat.com>
Date: Fri, 26 Oct 2012 09:22:23 -0400 (EDT)
From: Mikulas Patocka <mpatocka@...hat.com>
To: Oleg Nesterov <oleg@...hat.com>
cc: Dave Chinner <david@...morbit.com>,
Peter Zijlstra <peterz@...radead.org>,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Ingo Molnar <mingo@...e.hu>,
Srikar Dronamraju <srikar@...ux.vnet.ibm.com>,
Ananth N Mavinakayanahalli <ananth@...ibm.com>,
Anton Arapov <anton@...hat.com>, linux-kernel@...r.kernel.org,
Thomas Gleixner <tglx@...utronix.de>
Subject: Re: [PATCH 1/2] brw_mutex: big read-write mutex
On Fri, 26 Oct 2012, Oleg Nesterov wrote:
> On 10/26, Dave Chinner wrote:
> >
> > On Thu, Oct 25, 2012 at 10:09:31AM -0400, Mikulas Patocka wrote:
> > >
> > > Yes, mnt_want_write()/mnt_make_readonly() do the same thing as percpu rw
> > > semaphores. I think you can convert mnt_want_write()/mnt_make_readonly()
> > > to use percpu rw semaphores and remove the duplicated code.
> >
> > I think you misunderstood my point - that rather than re-inventing
> > the wheel, why didn't you just copy something that is known to
> > work?
I didn't know about. The code is not reusable, and it doesn't really do
locking. And it has two barriers on the read path, while percpu rw
semaphores have none.
> I don't understand why do you both think that __mnt_want_write()
> and mnt_make_readonly() provides the same functionality. I looked
> at this code before I started this patch, and unless I completely
> misread it this does very different things. It is not "lock" at all.
>
> Oleg.
mnt_want_write uses percpu array of counters, just like percpu semaphores.
The code is different, but it can be changed to use percpu rw semaphores
(if we add percpu_down_write_trylock).
__mnt_want_write could call percpu_down_read and check if it is readonly
(if it is, drop the lock and return -EROFS)
__mnt_drop_write could call percpu_up_read
mnt_make_readonly and sb_prepare_remount_readonly could call
percpu_down_write_trylock instead of mnt_get_writers (if they get the
write lock, set it to readonly and drop the write lock)
... and that's it, then, you can remove MNT_WRITE_HOLD, the barriers,
spinning and other complexity from fs/namespace.c
Mikulas
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists