Skip to contentSkip to conversation

Initialise scatter/gather list in sg driver

PATCH New Anton Blanchard 2 participants 3 messages Oct 25, 2007 – Oct 26, 2007 libata

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Initialise scatter/gather list in sg driver

After turning on DEBUG_SG I hit a fail:

kernel BUG at include/linux/scatterlist.h:50!

ata_qc_issue
ata_scsi_translate
ipr_queuecommand
scsi_dispatch_cmd
scsi_request_fn
elv_insert
blk_execute_rq_nowait
blk_execute_rq
sg_io
scsi_cmd_ioctl
cdrom_ioctl
sr_block_ioctl
blkdev_driver_ioctl
blkdev_ioctl
block_ioctl
do_ioctl
vfs_ioctl
sys_ioctl
sg_ioctl_trans

It looks like ata_sg_setup is working on an uninitialised sg table. Call sg_init_table to initialise it before use.

---

Jens this is against your sg branch. This fixes the fail but Id appreciate a confirmation that it's the right fix :)

drivers/ata/libata-core.c +1 -0
index b5f7c59..4de41bb 100644
@@ -4689,6 +4689,7 @@ static int ata_sg_setup(struct ata_queued_cmd *qc)
 		 * data in this function or read data in ata_sg_clean.
 		 */
 		offset = lsg->offset + lsg->length - qc->pad_len;
+		sg_init_table(psg, 1);
 		sg_set_page(psg, nth_page(sg_page(lsg), offset >> PAGE_SHIFT),
 				qc->pad_len, offset_in_page(offset));
 
#1 lore raw

PATCH 1/1 Initialise scatter/gather list in ata_sg_setup

(Sorry the subject was incorrect)...

After turning on DEBUG_SG I hit a fail:

kernel BUG at include/linux/scatterlist.h:50!

ata_qc_issue
ata_scsi_translate
ipr_queuecommand
scsi_dispatch_cmd
scsi_request_fn
elv_insert
blk_execute_rq_nowait
blk_execute_rq
sg_io
scsi_cmd_ioctl
cdrom_ioctl
sr_block_ioctl
blkdev_driver_ioctl
blkdev_ioctl
block_ioctl
do_ioctl
vfs_ioctl
sys_ioctl
sg_ioctl_trans

It looks like ata_sg_setup is working on an uninitialised sg table. Call sg_init_table to initialise it before use.

---

Jens this is against your sg branch. This fixes the fail but Id appreciate a confirmation that it's the right fix :)

drivers/ata/libata-core.c +1 -0
index b5f7c59..4de41bb 100644
@@ -4689,6 +4689,7 @@ static int ata_sg_setup(struct ata_queued_cmd *qc)
 		 * data in this function or read data in ata_sg_clean.
 		 */
 		offset = lsg->offset + lsg->length - qc->pad_len;
+		sg_init_table(psg, 1);
 		sg_set_page(psg, nth_page(sg_page(lsg), offset >> PAGE_SHIFT),
 				qc->pad_len, offset_in_page(offset));
 
#2 lore raw

Re: [PATCH] Initialise scatter/gather list in ata_sg_setup

Quoted 27 lines · Anton Blanchard

(Sorry the subject was incorrect)...

After turning on DEBUG_SG I hit a fail:

kernel BUG at include/linux/scatterlist.h:50!

ata_qc_issue
ata_scsi_translate
ipr_queuecommand
scsi_dispatch_cmd
scsi_request_fn
elv_insert
blk_execute_rq_nowait
blk_execute_rq
sg_io
scsi_cmd_ioctl
cdrom_ioctl
sr_block_ioctl
blkdev_driver_ioctl
blkdev_ioctl
block_ioctl
do_ioctl
vfs_ioctl
sys_ioctl
sg_ioctl_trans

Quoted 8 lines

It looks like ata_sg_setup is working on an uninitialised sg table. Call sg_init_table to initialise it before use.

---

Jens this is against your sg branch. This fixes the fail but Id appreciate a confirmation that it's the right fix :)

The patch looks OK, you could also get away with just doing that sg_init_table() on qc init/alloc.

Signature · 1 line
Jens Axboe