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

Commit b79d9a09 authored by Ming Lei's avatar Ming Lei Committed by Martin K. Petersen
Browse files

scsi: lib/sg_pool.c: clear 'first_chunk' in case of no preallocation



If user doesn't ask to preallocate by passing zero 'nents_first_chunk' to
sg_alloc_table_chained, we need to make sure that 'first_chunk' is cleared.
Otherwise, __sg_alloc_table() still may think that the 1st SGL should be
from the preallocation.

Fixes the issue by clearing 'first_chunk' in sg_alloc_table_chained() if
'nents_first_chunk' is zero.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Bart Van Assche <bvanassche@acm.org>
Cc: Ewan D. Milne <emilne@redhat.com>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 3dccdf53
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -102,7 +102,9 @@ EXPORT_SYMBOL_GPL(sg_free_table_chained);
 *
 *
 *  Description:
 *  Description:
 *    Allocate and chain SGLs in an sg table. If @nents@ is larger than
 *    Allocate and chain SGLs in an sg table. If @nents@ is larger than
 *    @nents_first_chunk a chained sg table will be setup.
 *    @nents_first_chunk a chained sg table will be setup. @first_chunk is
 *    ignored if nents_first_chunk <= 1 because user expects the SGL points
 *    non-chain SGL.
 *
 *
 **/
 **/
int sg_alloc_table_chained(struct sg_table *table, int nents,
int sg_alloc_table_chained(struct sg_table *table, int nents,
@@ -121,7 +123,7 @@ int sg_alloc_table_chained(struct sg_table *table, int nents,
	}
	}


	/* User supposes that the 1st SGL includes real entry */
	/* User supposes that the 1st SGL includes real entry */
	if (nents_first_chunk == 1) {
	if (nents_first_chunk <= 1) {
		first_chunk = NULL;
		first_chunk = NULL;
		nents_first_chunk = 0;
		nents_first_chunk = 0;
	}
	}