Commit d2e46004 authored by Julian Wiedmann's avatar Julian Wiedmann Committed by David S. Miller
Browse files

s390/qeth: make qeth_qdio_handle_aob() more robust



When qeth_qdio_handle_aob() frees dangling allocations in the notified
TX buffer, there are rare tear-down cases where
qeth_drain_output_queue() would later call qeth_clear_output_buffer()
for the same buffer - and thus end up walking the buffer a second time
to check for dangling kmem_cache allocations.

Luckily current code previously scrubs such a buffer, so
qeth_clear_output_buffer() would find buf->buffer->element[i].addr as
NULL and not do anything. But this is fragile, and we can easily improve
it by consistently clearing the ->is_header flag after freeing the
allocation.

Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 75cf3854
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -546,6 +546,7 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,

			if (data && buffer->is_header[i])
				kmem_cache_free(qeth_core_header_cache, data);
			buffer->is_header[i] = 0;
		}

		atomic_set(&buffer->state, QETH_QDIO_BUF_EMPTY);