The sata_mv construct worked just fine before sg chaining :)
I'm testing a similar patch based on ata_fill_sg()'s method, which
basically does something similar to what you've done here (see
attached). I had noticed that ata_fill_sg() did not call ata_sg_is_last().
If this fixes the problem, I think the best solution would be to delete
ata_sg_is_last(). In the few users that exist, we should be able to
eliminate the test programmatically as you and ata_fill_sg() have done
-- thereby eliminating a branch per loop in a hotpath.
Off to test the attached... if that doesn't work I'll try your version,
though there shouldn't be much difference.
Jeff