Use cv_timedwait_interruptible in arc
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 10 Dec 2010 20:00:00 +0000 (12:00 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 14 Dec 2010 18:06:44 +0000 (10:06 -0800)
commit5b63b3eb6f42f3d9f6a19b22c3f10f72927eeacc
treee748e57cc0c2b97a728daec9fb703fcc3c197760
parent8d4e8140ef67fa9c8fa0b1d0f5b1d5d36c747969
Use cv_timedwait_interruptible in arc

The issue is that cv_timedwait() sleeps uninterruptibly to block signals
and avoid waking up early.  Under Linux this counts against the load
average keeping it artificially high.  This change allows the arc to
sleep interruptibly which mean it may be woken up early due to a signal.

Normally this means some extra care must be taken to handle a potential
signal.  But for the arcs usage of cv_timedwait() there is no harm in
waking up before the timeout expires so no extra handling is required.
include/sys/zfs_context.h
module/zfs/arc.c