diff options
author | luozhengzheng <[email protected]> | 2016-10-18 03:03:52 +0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-10-17 12:03:52 -0700 |
commit | b60eac3d1a7b74e54ac8af9d533ff423c8ce9f8f (patch) | |
tree | 344ca98ed666f4482e796904fb0a540a54cbbc01 /module/zfs/arc.c | |
parent | f8e87e205c745c1e360230ac9c7631eb4632acfa (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.c | 6 |
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); |