if ORANGEFS_VFS_OP_FILE_IO request had been given up, don't bother waiting
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 23 Jan 2016 18:27:50 +0000 (13:27 -0500)
committerMike Marshall <hubcap@omnibond.com>
Sat, 23 Jan 2016 20:20:11 +0000 (15:20 -0500)
... 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>
fs/orangefs/devorangefs-req.c

index d8c436a0aa1b56b6b6566f909e914865527e8137..3879f2b7cf296057e9f8d7a615449e7c0a9580a9 100644 (file)
@@ -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);