diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c index f10a04d112a8..9d0c68c02676 100644 --- a/module/zfs/dbuf.c +++ b/module/zfs/dbuf.c @@ -2088,7 +2088,12 @@ dmu_buf_impl_t * dbuf_hold(dnode_t *dn, uint64_t blkid, void *tag) { dmu_buf_impl_t *db; - int err = dbuf_hold_impl(dn, 0, blkid, FALSE, tag, &db); + int err; + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + err = dbuf_hold_impl(dn, 0, blkid, FALSE, tag, &db); + spl_fstrans_unmark(cookie); return (err ? NULL : db); } diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c index 1501ae8046ad..3e510a411610 100644 --- a/module/zfs/dmu.c +++ b/module/zfs/dmu.c @@ -541,6 +541,7 @@ dmu_prefetch(objset_t *os, uint64_t object, uint64_t offset, uint64_t len) return; if (len == 0) { /* they're interested in the bonus buffer */ + fstrans_cookie_t cookie; dn = DMU_META_DNODE(os); if (object == 0 || object >= DN_MAX_OBJECT) @@ -548,7 +549,9 @@ dmu_prefetch(objset_t *os, uint64_t object, uint64_t offset, uint64_t len) rw_enter(&dn->dn_struct_rwlock, RW_READER); blkid = dbuf_whichblock(dn, object * sizeof (dnode_phys_t)); + cookie = spl_fstrans_mark(); dbuf_prefetch(dn, blkid, ZIO_PRIORITY_SYNC_READ); + spl_fstrans_unmark(cookie); rw_exit(&dn->dn_struct_rwlock); return; } @@ -573,10 +576,13 @@ dmu_prefetch(objset_t *os, uint64_t object, uint64_t offset, uint64_t len) if (nblks != 0) { int i; + fstrans_cookie_t cookie; blkid = dbuf_whichblock(dn, offset); + cookie = spl_fstrans_mark(); for (i = 0; i < nblks; i++) dbuf_prefetch(dn, blkid + i, ZIO_PRIORITY_SYNC_READ); + spl_fstrans_unmark(cookie); } rw_exit(&dn->dn_struct_rwlock); diff --git a/module/zfs/dmu_zfetch.c b/module/zfs/dmu_zfetch.c index 8ff2f0509787..40773b59a05c 100644 --- a/module/zfs/dmu_zfetch.c +++ b/module/zfs/dmu_zfetch.c @@ -289,12 +289,15 @@ dmu_zfetch_fetch(dnode_t *dn, uint64_t blkid, uint64_t nblks) { uint64_t fetchsz; uint64_t i; + fstrans_cookie_t cookie; fetchsz = dmu_zfetch_fetchsz(dn, blkid, nblks); + cookie = spl_fstrans_mark(); for (i = 0; i < fetchsz; i++) { dbuf_prefetch(dn, blkid + i, ZIO_PRIORITY_ASYNC_READ); } + spl_fstrans_unmark(cookie); return (fetchsz); } diff --git a/module/zfs/sa.c b/module/zfs/sa.c index 9063d1dae449..8c66508fe1f2 100644 --- a/module/zfs/sa.c +++ b/module/zfs/sa.c @@ -1436,7 +1436,13 @@ sa_handle_get(objset_t *objset, uint64_t objid, void *userp, int sa_buf_hold(objset_t *objset, uint64_t obj_num, void *tag, dmu_buf_t **db) { - return (dmu_bonus_hold(objset, obj_num, tag, db)); + fstrans_cookie_t cookie; + int rval; + + cookie = spl_fstrans_mark(); + rval = (dmu_bonus_hold(objset, obj_num, tag, db)); + spl_fstrans_unmark(cookie); + return (rval); } void