[stgt] [PATCH 2/2] iscsi user-initiated disconnect fix: scheduling mtask processing

FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Tue Nov 9 02:49:00 CET 2010


On Sun, 07 Nov 2010 19:00:22 +0200
Alexander Nezhinsky <alexandern at Voltaire.COM> wrote:

> Fixes another bug with user-initiated disconnect. It led to segfaults
> when deleting an iscsi connection during concurrent I/O.
> 
> Processing of managements tasks (mtasks) has been performed in the main event loop.
> When epoll_wait() returns, it saves all signaled file descriptors in an array, 
> and those are processed one by one. There is a tacit assumption that every event 
> is processed separately and independently of other events. Still, in case of mtasks
> there may be a dependency between handling an mtask and the remaining events.
> When a management request asking for connection removal arrives during a heavy
> traffic, there is a high probability that the tcp socket of the iscsi connection
> is also signaled. If the management fd is processed first (which is guaranteed,
> as it is created and added to epoll first), then the connection and all its 
> associated data incl. the tcp-related event itself are destroyed.
> When the turn of this deleted tcp-related event in the epoll_wait-filled array
> comes, we end up referencing garbage.
> 
> The solution implemented here is to schedule an event that calls the original
> mtask-processing code instead of processing it on the spot.
> Because the scheduled events are serviced after all epoll_wait() events are handled,
> this guarantees that the connection is destroyed when no epoll_wait-detected fds 
> are waiting. After that epoll_wait() won't detect anything related to the connection,
> as its fd is already removed from epoll records.

We can avoid this bug with the following patch?

I think that we can't call conn_close in conn_close_force.

http://lists.wpkg.org/pipermail/stgt/2010-September/004148.html
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list