On Sat, Dec 13, 2014 at 03:09:59PM -0800, Linus Torvalds wrote: > On Sat, Dec 13, 2014 at 2:59 PM, Linus Torvalds > <torva...@linux-foundation.org> wrote: > > The generic code does that mnt_want_write/mnt_drop_write > > dance adound the call to setxattr, and that in turn does > > > > while (ACCESS_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD) > > cpu_relax(); > > > > with preemption explicitly disabled. > > Btw, I see no reason why mnt_want_write/mnt_drop_write disables > preemption. They don't care, they just care about the ordering of the > write counts and the MNT_WRITE_HOLD bit. It's the code that sets the > bit that should care, afaik. But maybe I'm missing something.
Er... There's much more direct reason - suppose we get a timer interrupt right in the middle of mnt_drop_write(). And lost the timeslice. On UP we have mnt->mnt_writers--, with no locks held. On SMP we have this_cpu_dec() instead, also without any locks. You really don't want to lose the timeslice in the middle of either... -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/