• S
    ieee1394: sbp2: handle "sbp2util_node_write_no_wait failed" · 09ee67ab
    Stefan Richter 提交于
    Fix for http://bugzilla.kernel.org/show_bug.cgi?id=6948
    
    Because sbp2 writes to the target's fetch agent's registers from within
    atomic context, it cannot sleep to guaranteedly get a free transaction
    label.  This may repeatedly lead to "sbp2util_node_write_no_wait failed"
    and consequently to SCSI command abortion after timeout.  A likely cause
    is that many queue_command softirqs may occur before khpsbpkt (the
    ieee1394 driver's thread which cleans up after finished transactions) is
    woken up to recycle tlabels.
    
    Sbp2 now schedules a workqueue job whenever sbp2_link_orb_command fails
    in sbp2util_node_write_no_wait.  The job will reliably get a transaction
    label because it can sleep.
    
    We use the kernel-wide shared workqueue because it is unlikely that the
    job itself actually needs to sleep.  In the improbable case that it has
    to sleep, it doesn't need to sleep long since the standard transaction
    timeout is 100ms.
    Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
    09ee67ab
sbp2.c 79.6 KB