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.
Signed-off-by: Anton Blanchard <anton@samba.org>
Note: this patch will fix it, but you could also get away with just
doing the sg_init_table() once at qc creation time.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
                 * 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));