* that this op is done
*/
spin_lock(&op->lock);
- if (!op_state_given_up(op))
- set_op_state_serviced(op);
+ if (unlikely(op_state_given_up(op))) {
+ spin_unlock(&op->lock);
+ goto out;
+ }
+ set_op_state_serviced(op);
spin_unlock(&op->lock);
while (1) {
break;
}
spin_unlock(&op->lock);
-
- if (!signal_pending(current)) {
- int timeout = op_timeout_secs * HZ;
- if (!schedule_timeout(timeout)) {
- gossip_debug(GOSSIP_DEV_DEBUG,
- "%s: timed out.\n",
- __func__);
- break;
- }
- continue;
+ if (unlikely(signal_pending(current))) {
+ gossip_debug(GOSSIP_DEV_DEBUG,
+ "%s: signal on I/O wait, aborting\n",
+ __func__);
+ break;
}
- gossip_debug(GOSSIP_DEV_DEBUG,
- "%s: signal on I/O wait, aborting\n",
- __func__);
- break;
+ if (!schedule_timeout(op_timeout_secs * HZ)) {
+ gossip_debug(GOSSIP_DEV_DEBUG,
+ "%s: timed out.\n",
+ __func__);
+ break;
+ }
}
spin_lock(&op->lock);