tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
re: Locking in disk(9) api
Yesterday tron@ submitted PR kern/42532 it's about panic which
happen on device-mapper devices during concurrent access to them.
After some investigation and help from others I have found that
problem is that disk_busy and disk_unbusy requires users to manage
locking for them. This problem wasn't found yet mostly because we
don't have many D_MPSAFE enabled disk drivers and because dm is
very specific in locking.
the problem wasn't found in existing D_MPSAFE drivers because they
hold a mutex around these calls, and the rest of the drivers hold
the kernel lock. the fss(4) driver is also "very specific in
locking."
After some discussion I think that disk(9) api should be changed
to manage locking by itself and to not require explicit locking
from users. There are some options which can be used in this case,]
1) Use diskp->dk_openlock to lock access to
iostat_busy/iostat_unbusy/iostat_isbusy
2) Use atomic operations in iostat_busy/iostat_unbusy/iostat_isbusy
to manage io_stat reference counter
3) Add mutex to struct io_stat and use it to guard io_stat entries
from concurrent manipulation. There are 4 functions which will
need to acquire this lock
iostat_busy/iostat_unbusy/iostat_isbusy/iostat_seek
and iostat_free
you forgot to list (0) - leave things as they are, ie, continue to
require callers to manage locking. (also, update disk(9) to meantion
an IPL_VM mutex instead of being at splbio().)
it isn't clear to me that making every one pay the penalty of taking
an additional lock twice for each IO is a good one to allow dm(4) to
avoid managing locking itself.
currently most of the disk drivers are not marked D_MPSAFE and thus
they're implicitly serialised. ccd and fss both are marked D_MPSAFE
and use internal locking logic to (a) ensure that disk_*busy() are
called safely and (b) other internal logic happens safely.
since (b) is really required for disk devices anyway (and indeed,
dm has other locks it manages internally), i don't see that making
everyone pay the dual penalty (lock/unlock) just to avoid having
dm(4) perform this locking itself is actually a benefit.
after thinking about this during the afternoon, i'm more convinced
that the current method is OK. dm(4) just needs a little fix, and
i'm aware that adam has already sent a test patch for tron.
.mrg.
Home |
Main Index |
Thread Index |
Old Index