Skip to content
  • Shan Hai's avatar
    libata: Set max sector to 65535 for Slimtype DVD A DS8A8SH drive · a32450e1
    Shan Hai authored
    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 4dce8ba9
    
     (libata: Use 'bool' return value for ata_id_XXX) caused
     all drives to use maxsect=65535.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarShan Hai <shan.hai@windriver.com>
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    a32450e1