aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sys/arc_impl.h1
-rw-r--r--module/zfs/arc.c7
2 files changed, 4 insertions, 4 deletions
diff --git a/include/sys/arc_impl.h b/include/sys/arc_impl.h
index 6adcd4b54..94123fc10 100644
--- a/include/sys/arc_impl.h
+++ b/include/sys/arc_impl.h
@@ -99,6 +99,7 @@ struct arc_callback {
boolean_t acb_encrypted;
boolean_t acb_compressed;
boolean_t acb_noauth;
+ boolean_t acb_nobuf;
zbookmark_phys_t acb_zb;
zio_t *acb_zio_dummy;
zio_t *acb_zio_head;
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 1bc27391c..8519eda30 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -5759,7 +5759,7 @@ arc_read_done(zio_t *zio)
*/
int callback_cnt = 0;
for (acb = callback_list; acb != NULL; acb = acb->acb_next) {
- if (!acb->acb_done)
+ if (!acb->acb_done || acb->acb_nobuf)
continue;
callback_cnt++;
@@ -5999,7 +5999,7 @@ top:
}
ASSERT(*arc_flags & ARC_FLAG_NOWAIT);
- if (done && !no_buf) {
+ if (done) {
arc_callback_t *acb = NULL;
acb = kmem_zalloc(sizeof (arc_callback_t),
@@ -6009,6 +6009,7 @@ top:
acb->acb_compressed = compressed_read;
acb->acb_encrypted = encrypted_read;
acb->acb_noauth = noauth_read;
+ acb->acb_nobuf = no_buf;
acb->acb_zb = *zb;
if (pio != NULL)
acb->acb_zio_dummy = zio_null(pio,
@@ -6018,8 +6019,6 @@ top:
acb->acb_zio_head = head_zio;
acb->acb_next = hdr->b_l1hdr.b_acb;
hdr->b_l1hdr.b_acb = acb;
- mutex_exit(hash_lock);
- goto out;
}
mutex_exit(hash_lock);
goto out;