mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-11-07 14:54:53 +03:00
Current rw_tryupgrade does rw_exit and then rw_tryenter(RW_RWITER), and then does rw_enter(RW_READER) if it fails. This violate the assumption that rw_tryupgrade should be atomic and could cause extra contention or even lock inversion. This patch we implement a proper rw_tryupgrade. For rwsem-spinlock, we take the spinlock to check rwsem->count and rwsem->wait_list. For normal rwsem, we use cmpxchg on rwsem->count to change the value from single reader to single writer. Signed-off-by: Chunwei Chen <david.chen@osnexus.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tim Chase <tim@chase2k.com> Closes zfsonlinux/zfs#4692 Closes #554 |
||
|---|---|---|
| .. | ||
| Makefile.in | ||
| splat-atomic.c | ||
| splat-condvar.c | ||
| splat-cred.c | ||
| splat-ctl.c | ||
| splat-generic.c | ||
| splat-internal.h | ||
| splat-kmem.c | ||
| splat-kobj.c | ||
| splat-linux.c | ||
| splat-list.c | ||
| splat-mutex.c | ||
| splat-random.c | ||
| splat-rwlock.c | ||
| splat-taskq.c | ||
| splat-thread.c | ||
| splat-time.c | ||
| splat-vnode.c | ||
| splat-zlib.c | ||