Since dbuf_rele acquires db_mtx just to call dbuf_rele_and_unlock,
unlock in dbuf_read_done seems to be excessive. Suggested fix is
trivial:

-   481         mutex_exit(&db->db_mtx);
-   482         dbuf_rele(db, NULL);
+   482         dbuf_rele_and_unlock(db, NULL);
    483 }


    450 static void
    451 dbuf_read_done(zio_t *zio, arc_buf_t *buf, void *vdb)
    452 {
    453         dmu_buf_impl_t *db = vdb;
    454
    455         mutex_enter(&db->db_mtx);
...
    480         cv_broadcast(&db->db_changed);
    481         mutex_exit(&db->db_mtx);
    482         dbuf_rele(db, NULL);
    483 }

   1883 dbuf_rele(dmu_buf_impl_t *db, void *tag)
   1884 {
   1885         mutex_enter(&db->db_mtx);
   1886         dbuf_rele_and_unlock(db, tag);
   1887 }

Regards,
Andrey
_______________________________________________
zfs-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/zfs-code

Reply via email to