summaryrefslogtreecommitdiffstats
path: root/module/zfs/arc.c
diff options
context:
space:
mode:
authorluozhengzheng <[email protected]>2016-10-18 03:03:52 +0800
committerBrian Behlendorf <[email protected]>2016-10-17 12:03:52 -0700
commitb60eac3d1a7b74e54ac8af9d533ff423c8ce9f8f (patch)
tree344ca98ed666f4482e796904fb0a540a54cbbc01 /module/zfs/arc.c
parentf8e87e205c745c1e360230ac9c7631eb4632acfa (diff)
Fix coverity defects: CID 150924
CID 150924: Unchecked return value (CHECKED_RETURN) - On taskq_dispatch failure the reference must be dropped and this entry can be safely skipped. This case should be impossible in the existing implementation but should be handled regardless. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: luozhengzheng <[email protected]> Closes #5278
Diffstat (limited to 'module/zfs/arc.c')
-rw-r--r--module/zfs/arc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 7bae2c42d..0c5e66cbe 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -3472,7 +3472,11 @@ arc_prune_async(int64_t adjust)
refcount_add(&ap->p_refcnt, ap->p_pfunc);
ap->p_adjust = adjust;
- taskq_dispatch(arc_prune_taskq, arc_prune_task, ap, TQ_SLEEP);
+ if (taskq_dispatch(arc_prune_taskq, arc_prune_task,
+ ap, TQ_SLEEP) == 0) {
+ refcount_remove(&ap->p_refcnt, ap->p_pfunc);
+ continue;
+ }
ARCSTAT_BUMP(arcstat_prune);
}
mutex_exit(&arc_prune_mtx);