Merge tag 'trace-rtla-v6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / net / sunrpc / sysfs.c
index a3a2f8a..7330eb9 100644 (file)
@@ -314,32 +314,14 @@ static ssize_t rpc_sysfs_xprt_state_change(struct kobject *kobj,
                goto release_tasks;
        }
        if (offline) {
-               if (!test_and_set_bit(XPRT_OFFLINE, &xprt->state)) {
-                       spin_lock(&xps->xps_lock);
-                       xps->xps_nactive--;
-                       spin_unlock(&xps->xps_lock);
-               }
+               xprt_set_offline_locked(xprt, xps);
        } else if (online) {
-               if (test_and_clear_bit(XPRT_OFFLINE, &xprt->state)) {
-                       spin_lock(&xps->xps_lock);
-                       xps->xps_nactive++;
-                       spin_unlock(&xps->xps_lock);
-               }
+               xprt_set_online_locked(xprt, xps);
        } else if (remove) {
-               if (test_bit(XPRT_OFFLINE, &xprt->state)) {
-                       if (!test_and_set_bit(XPRT_REMOVE, &xprt->state)) {
-                               xprt_force_disconnect(xprt);
-                               if (test_bit(XPRT_CONNECTED, &xprt->state)) {
-                                       if (!xprt->sending.qlen &&
-                                           !xprt->pending.qlen &&
-                                           !xprt->backlog.qlen &&
-                                           !atomic_long_read(&xprt->queuelen))
-                                               rpc_xprt_switch_remove_xprt(xps, xprt);
-                               }
-                       }
-               } else {
+               if (test_bit(XPRT_OFFLINE, &xprt->state))
+                       xprt_delete_locked(xprt, xps);
+               else
                        count = -EINVAL;
-               }
        }
 
 release_tasks: