Browse Source

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 <viro@zeniv.linux.org.uk>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Al Viro 9 years ago
parent
commit
4f55e39732
1 changed files with 16 additions and 16 deletions
  1. 16 16
      fs/orangefs/devorangefs-req.c

+ 16 - 16
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);