From: Al Viro Date: Sat, 23 Jan 2016 18:27:50 +0000 (-0500) Subject: if ORANGEFS_VFS_OP_FILE_IO request had been given up, don't bother waiting X-Git-Tag: next-20160210~78^2~11 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=4f55e39732ad0bd05d70c88e174e747d55e3685c;p=karo-tx-linux.git if ORANGEFS_VFS_OP_FILE_IO request had been given up, don't bother waiting ... we are not going to get woken up anyway, so it's just going to time out and whine. Signed-off-by: Al Viro Signed-off-by: Mike Marshall --- diff --git a/fs/orangefs/devorangefs-req.c b/fs/orangefs/devorangefs-req.c index d8c436a0aa1b..3879f2b7cf29 100644 --- a/fs/orangefs/devorangefs-req.c +++ b/fs/orangefs/devorangefs-req.c @@ -418,8 +418,11 @@ wakeup: * 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) { @@ -433,22 +436,19 @@ wakeup: 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);