libata: Set max sector to 65535 for Slimtype DVD A DS8A8SH drive
The Slimtype DVD A DS8A8SH drive locks up when max sector is smaller than
65535, and the blow backtrace is observed on locking up:
INFO: task flush-8:32:1130 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
flush-8:32 D
ffffffff8180cf60 0 1130 2 0x00000000
ffff880273aef618 0000000000000046 0000000000000005 ffff880273aee000
ffff880273aee000 ffff880273aeffd8 ffff880273aee010 ffff880273aee000
ffff880273aeffd8 ffff880273aee000 ffff88026e842ea0 ffff880274a10000
Call Trace:
[<
ffffffff8168fc2d>] schedule+0x5d/0x70
[<
ffffffff8168fccc>] io_schedule+0x8c/0xd0
[<
ffffffff81324461>] get_request+0x731/0x7d0
[<
ffffffff8133dc60>] ? cfq_allow_merge+0x50/0x90
[<
ffffffff81083aa0>] ? wake_up_bit+0x40/0x40
[<
ffffffff81320443>] ? bio_attempt_back_merge+0x33/0x110
[<
ffffffff813248ea>] blk_queue_bio+0x23a/0x3f0
[<
ffffffff81322176>] generic_make_request+0xc6/0x120
[<
ffffffff81322308>] submit_bio+0x138/0x160
[<
ffffffff811d7596>] ? bio_alloc_bioset+0x96/0x120
[<
ffffffff811d1f61>] submit_bh+0x1f1/0x220
[<
ffffffff811d48b8>] __block_write_full_page+0x228/0x340
[<
ffffffff811d3650>] ? attach_nobh_buffers+0xc0/0xc0
[<
ffffffff811d8960>] ? I_BDEV+0x10/0x10
[<
ffffffff811d8960>] ? I_BDEV+0x10/0x10
[<
ffffffff811d4ab6>] block_write_full_page_endio+0xe6/0x100
[<
ffffffff811d4ae5>] block_write_full_page+0x15/0x20
[<
ffffffff811d9268>] blkdev_writepage+0x18/0x20
[<
ffffffff81142527>] __writepage+0x17/0x40
[<
ffffffff811438ba>] write_cache_pages+0x34a/0x4a0
[<
ffffffff81142510>] ? set_page_dirty+0x70/0x70
[<
ffffffff81143a61>] generic_writepages+0x51/0x80
[<
ffffffff81143ab0>] do_writepages+0x20/0x50
[<
ffffffff811c9ed6>] __writeback_single_inode+0xa6/0x2b0
[<
ffffffff811ca861>] writeback_sb_inodes+0x311/0x4d0
[<
ffffffff811caaa6>] __writeback_inodes_wb+0x86/0xd0
[<
ffffffff811cad43>] wb_writeback+0x1a3/0x330
[<
ffffffff816916cf>] ? _raw_spin_lock_irqsave+0x3f/0x50
[<
ffffffff811b8362>] ? get_nr_inodes+0x52/0x70
[<
ffffffff811cb0ac>] wb_do_writeback+0x1dc/0x260
[<
ffffffff8168dd34>] ? schedule_timeout+0x204/0x240
[<
ffffffff811cb232>] bdi_writeback_thread+0x102/0x2b0
[<
ffffffff811cb130>] ? wb_do_writeback+0x260/0x260
[<
ffffffff81083550>] kthread+0xc0/0xd0
[<
ffffffff81083490>] ? kthread_worker_fn+0x1b0/0x1b0
[<
ffffffff8169a3ec>] ret_from_fork+0x7c/0xb0
[<
ffffffff81083490>] ? kthread_worker_fn+0x1b0/0x1b0
The above trace was triggered by
"dd if=/dev/zero of=/dev/sr0 bs=2048 count=32768"
It was previously working by accident, since another bug introduced
by
4dce8ba94c7 (libata: Use 'bool' return value for ata_id_XXX) caused
all drives to use maxsect=65535.
Cc: stable@vger.kernel.org
Signed-off-by: Shan Hai <shan.hai@windriver.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>