Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8c0d226 authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

svcrpc: simplify svc_close_all



There's no need to be fooling with XPT_BUSY now that all the threads
are gone.

The list_del_init() here could execute at the same time as the
svc_xprt_enqueue()'s list_add_tail(), with undefined results.  We don't
really care at this point, but it might result in a spurious
list-corruption warning or something.

And svc_close() isn't adding any value; just call svc_delete_xprt()
directly.

Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent ca7896cd
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -941,16 +941,16 @@ void svc_close_all(struct list_head *xprt_list)
	struct svc_xprt *xprt;
	struct svc_xprt *tmp;

	/*
	 * The server is shutting down, and no more threads are running.
	 * svc_xprt_enqueue() might still be running, but at worst it
	 * will re-add the xprt to sp_sockets, which will soon get
	 * freed.  So we don't bother with any more locking, and don't
	 * leave the close to the (nonexistent) server threads:
	 */
	list_for_each_entry_safe(xprt, tmp, xprt_list, xpt_list) {
		set_bit(XPT_CLOSE, &xprt->xpt_flags);
		if (test_bit(XPT_BUSY, &xprt->xpt_flags)) {
			/* Waiting to be processed, but no threads left,
			 * So just remove it from the waiting list
			 */
			list_del_init(&xprt->xpt_ready);
			clear_bit(XPT_BUSY, &xprt->xpt_flags);
		}
		svc_close_xprt(xprt);
		svc_delete_xprt(xprt);
	}
}