From: Alexey Zhuravlev Date: Mon, 15 Jul 2019 18:01:59 +0000 (+0300) Subject: LU-12510 osd: osd-zfs to release zrlock quickly X-Git-Tag: 2.12.57~112 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=88b329ac2ab568a25251f3f7c3a7e0c7367cb36f LU-12510 osd: osd-zfs to release zrlock quickly otherwise few threads trying to access same dnode can get stuck. this patch is a quick workaround for the issue, it's supposed to be replaced with a better patch using regular DMU API. Change-Id: I24d9ed7f8e68080c6a46409476a80799dbb45230 Signed-off-by: Alexey Zhuravlev Reviewed-on: https://review.whamcloud.com/35524 Tested-by: jenkins Reviewed-by: Brian Behlendorf Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Li Dongyang Reviewed-by: Oleg Drokin --- diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h index ef80fa1..304b309 100644 --- a/lustre/osd-zfs/osd_internal.h +++ b/lustre/osd-zfs/osd_internal.h @@ -952,7 +952,6 @@ static inline void osd_dnode_rele(dnode_t *dn) LASSERT(dn->dn_bonus); db = dn->dn_bonus; - DB_DNODE_EXIT(db); dmu_buf_rele(&db->db, osd_obj_tag); } diff --git a/lustre/osd-zfs/osd_object.c b/lustre/osd-zfs/osd_object.c index 6d582ea..02983ac 100644 --- a/lustre/osd-zfs/osd_object.c +++ b/lustre/osd-zfs/osd_object.c @@ -291,6 +291,7 @@ int __osd_obj2dnode(objset_t *os, uint64_t oid, dnode_t **dnp) dbi = (dmu_buf_impl_t *)db; DB_DNODE_ENTER(dbi); *dnp = DB_DNODE(dbi); + DB_DNODE_EXIT(dbi); LASSERT(*dnp != NULL); return 0; @@ -1649,6 +1650,7 @@ int osd_find_new_dnode(const struct lu_env *env, dmu_tx_t *tx, atomic_inc_32(&dn->dn_dbufs_count); } *dnp = dn; + DB_DNODE_EXIT(db); dbuf_read(db, NULL, DB_RF_MUST_SUCCEED | DB_RF_NOPREFETCH); break; }