Whamcloud - gitweb
LU-12510 osd: osd-zfs to release zrlock quickly 24/35524/3
authorAlexey Zhuravlev <bzzz@whamcloud.com>
Mon, 15 Jul 2019 18:01:59 +0000 (21:01 +0300)
committerOleg Drokin <green@whamcloud.com>
Wed, 24 Jul 2019 04:20:50 +0000 (04:20 +0000)
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 <bzzz@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/35524
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osd-zfs/osd_internal.h
lustre/osd-zfs/osd_object.c

index ef80fa1..304b309 100644 (file)
@@ -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);
 }
 
index 6d582ea..02983ac 100644 (file)
@@ -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;
        }