]> git.proxmox.com Git - mirror_spl.git/blobdiff - include/sys/rwlock.h
Implement a proper rw_tryupgrade
[mirror_spl.git] / include / sys / rwlock.h
index 14d097b01ac161b906268c7938d464a485190423..facebe3ba7fd6cc5a1c000eb14eadbada7488f9e 100644 (file)
@@ -223,13 +223,10 @@ RW_LOCK_HELD(krwlock_t *rwp)
        if (RW_WRITE_HELD(rwp)) {                                       \
                _rc_ = 1;                                               \
        } else {                                                        \
-               rw_exit(rwp);                                           \
-               if (rw_tryenter(rwp, RW_WRITER)) {                      \
-                       _rc_ = 1;                                       \
-               } else {                                                \
-                       rw_enter(rwp, RW_READER);                       \
-                       _rc_ = 0;                                       \
-               }                                                       \
+               spl_rw_lockdep_off_maybe(rwp);                          \
+               if ((_rc_ = rwsem_tryupgrade(SEM(rwp))))                \
+                       spl_rw_set_owner(rwp);                          \
+               spl_rw_lockdep_on_maybe(rwp);                           \
        }                                                               \
        _rc_;                                                           \
 })