<div>Kernel: 2.6.30.9</div>
<div> </div>
<div>I am trouble shooting a hang in XFS during umount.</div>
<div>Test scenerio: Copy large number of files files using below script, and remove the USB after 3-5 second</div>
<div> </div>
<div>index=0<br>while [ &quot;$?&quot; == 0 ]<br>do<br>        index=$((index+1))<br>        sync<br>        cp $1/1KB.txt $2/&quot;$index&quot;.test<br>done</div>
<div> </div>
<div>In rare scenerio during USB unplug the umount process hang at xfs_buf_lock. Below log shows the hung process</div>
<div> </div>
<div>We have put printk to buffer handling functions xfs_buf_iodone_callbacks(), xfs_buf_error_relse(), xfs_buf_relse() and xfs_buf_rele()</div>
<div> </div>
<div>We always observed the hang only comes when bp-&gt;b_relse = xfs_buf_error_relse(). i.e when xfs_buf_iodone_callbacks() execute </div>
<div>XFS_BUF_SET_BRELSE_FUNC(bp,xfs_buf_error_relse);<br>XFS_BUF_DONE(bp);<br>XFS_BUF_FINISH_IOWAIT(bp); </div>
<div> </div>
<div>
<div>buf its never called by xfs_buf_relse() because b_hold = 3.</div>
<div> </div>
<div>Also we have seen that this problem always comes when bp-&gt;relse != NULL &amp;&amp; bp-&gt;hold &gt; 1.</div>
<div> </div>
<div>I do not know whether below prints will help you, but I have taken printk for super block buffer tracing</div>
<div>S-functionname ( Start of function)</div>
<div>E-functionname (End of function)</div>
<div> </div>
<div>I think the problem is related to xfs_buf_iodone_callbacks synchronous buffer error handling path and release buffer.</div>
<div>------------------------------------------------</div></div>
<div>buf_lock   (Here buffer lock success, taken after down())<br>S-xfs_buf_rele - 3  (Start of xfs_buf_rele(), b_hold = 3)</div>
<div>Call Trace:<br>[&lt;8032c1bc&gt;] dump_stack+0x8/0x34 from[&lt;801cab2c&gt;] xfs_buf_rele+0xc8/0x28c<br>[&lt;801cab2c&gt;] xfs_buf_rele+0xc8/0x28c from[&lt;801cad9c&gt;] xfs_buf_delwri_dequeue+0xac/0x13c<br>[&lt;801cad9c&gt;] xfs_buf_delwri_dequeue+0xac/0x13c from[&lt;801cb798&gt;] xfs_bwrite+0x5c/0x128<br>
[&lt;801cb798&gt;] xfs_bwrite+0x5c/0x128 from[&lt;801d5b48&gt;] xfs_sync_fsdata+0xbc/0x17c<br>[&lt;801d5b48&gt;] xfs_sync_fsdata+0xbc/0x17c from[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68<br>[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68 from[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec<br>
[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec&lt;7&gt;hub 2-0:1.0: state 7 ports 1 chg 0000 evt 0002<br></div>
<div>usb 2-1: USB disconnect, address 3<br></div>
<div> from[&lt;800b7ff0&gt;] sync_filesystems+0x118/0x19c<br>[&lt;800b7ff0&gt;] sync_filesystems+0x118/0x19c from[&lt;800db490&gt;] do_sync+0x38/0x7c<br>[&lt;800db490&gt;] do_sync+0x38/0x7c from[&lt;800db510&gt;] sys_sync+0x10/0x20<br>
[&lt;800db510&gt;] sys_sync+0x10/0x20 from[&lt;8000ff44&gt;] stack_done+0x20/0x3c</div>
<div><br>E-xfs_buf_rele  (End of function)</div>
<div>  </div>
<div>S-xfs_bdstrat_cb</div>
<div>S-xfs_buf_rele - 3<br>S-xfs_buf_iodone_callbacks<br>Device sda2, XFS metadata write error block 0x0 in sda2</div>
<div><br>E-xfs_buf_iodone_callbacks<br>Call Trace:<br>[&lt;8032c1bc&gt;] dump_stack+0x8/0x34 from[&lt;801cab2c&gt;] xfs_buf_rele+0xc8/0x28c<br>[&lt;801cab2c&gt;] xfs_buf_rele+0xc8/0x28c from[&lt;801cb2fc&gt;] xfs_buf_iorequest+0xe8/0x104<br>
[&lt;801cb2fc&gt;] xfs_buf_iorequest+0xe8/0x104 from[&lt;801cbd2c&gt;] xfs_bdstrat_cb+0x140/0x178<br>[&lt;801cbd2c&gt;] xfs_bdstrat_cb+0x140/0x178 from[&lt;801cb7ac&gt;] xfs_bwrite+0x70/0x128<br>[&lt;801cb7ac&gt;] xfs_bwrite+0x70/0x128 from[&lt;801d5b48&gt;] xfs_sync_fsdata+0xbc/0x17c<br>
[&lt;801d5b48&gt;] xfs_sync_fsdata+0xbc/0x17c from[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68<br>[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68 from[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec<br>[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec from[&lt;800b7ff0&gt;] sync_filesystems+0x118/0x19c<br>
[&lt;800b7ff0&gt;] sync_filesystems+0x118/0x19c from[&lt;800db490&gt;] do_sync+0x38/0x7c<br>[&lt;800db490&gt;] do_sync+0x38/0x7c from[&lt;800db510&gt;] sys_sync+0x10/0x20<br>[&lt;800db510&gt;] sys_sync+0x10/0x20 from[&lt;8000ff44&gt;] stack_done+0x20/0x3c</div>

<div><br>E-xfs_buf_rele<br>E-xfs_bdstrat_cb<br>xfs_force_shutdown(sda2,0x1) called from line 1020 of file fs/xfs/linux-2.6/xfs_buf.c.  Return address = 0x801cb7f0<br>Filesystem &quot;sda2&quot;: I/O Error Detected.  Shutting down filesystem: sda2<br>
Please umount the filesystem, and rectify the problem(s)</div>
<div>S-xfs_buf_relse<br>S-xfs_buf_rele - 2</div>
<div>Call Trace:<br>[&lt;8032c1bc&gt;] dump_stack+0x8/0x34 from[&lt;801cab2c&gt;] xfs_buf_rele+0xc8/0x28c<br>[&lt;801cab2c&gt;] xfs_buf_rele+0xc8/0x28c from[&lt;801cb828&gt;] xfs_bwrite+0xec/0x128<br>[&lt;801cb828&gt;] xfs_bwrite+0xec/0x128 from[&lt;801d5b48&gt;] xfs_sync_fsdata+0xbc/0x17c<br>
[&lt;801d5b48&gt;] xfs_sync_fsdata+0xbc/0x17c from[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68<br>[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68 from[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec<br>[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec from[&lt;800b7ff0&gt;] sync_filesystems+0x118/0x19c<br>
[&lt;800b7ff0&gt;] sync_filesystems+0x118/0x19c from[&lt;800db490&gt;] do_sync+0x38/0x7c<br>[&lt;800db490&gt;] do_sync+0x38/0x7c from[&lt;800db510&gt;] sys_sync+0x10/0x20<br>[&lt;800db510&gt;] sys_sync+0x10/0x20 from[&lt;8000ff44&gt;] stack_done+0x20/0x3c</div>

<div><br>E-xfs_buf_rele<br>E-xfs_buf_relse<br>cp: cannot stat &#39;/dtv/usb/sda2/6.test&#39;: Input/output error<br>Filesystem &quot;sda2&quot;: xfs_log_force: error 5 returned.<br>INFO: task khubd:56 blocked for more than 120 seconds.<br>
&quot;echo 0 &gt; /proc/sys/kernel/hung_task_timeout_secs&quot; disables this message.<br>khubd            D [86a516a8] 8032cb2c     0    56      2            237      26      (kernel thread)<br>Stack : 00000000 801a2a6c 8643ebe0 86b43a8c 86a51830 8032cb2c 7fffffff 86a516a8<br>
        00000002 00000001 86b6dc00 80243a10 e0364448 8032c344 e0373f10 8032cb2c<br>        00000087 0000000b 86b43ab8 801d61bc 3b9aca00 8032d16c 00000008 8019f0dc<br>        86b43a88 00008000 8643ebe0 8616d900 0000000b 00000000 00000000 86bae000<br>
        86b43b08 801d62e0 7fffffff 86a516a8 00000002 8032e374 00000000 8008fae4<br>        ...<br>Call Trace:<br>[&lt;8032ca74&gt;] __schedule+0x618/0x6b8 from[&lt;8032cb2c&gt;] schedule+0x18/0x3c<br>[&lt;8032cb2c&gt;] schedule+0x18/0x3c from[&lt;8032d16c&gt;] schedule_timeout+0x2c/0x1c0<br>
[&lt;8032d16c&gt;] schedule_timeout+0x2c/0x1c0 from[&lt;8032e374&gt;] __down+0x8c/0xdc<br>[&lt;8032e374&gt;] __down+0x8c/0xdc from[&lt;8004500c&gt;] down+0x40/0x88<br>[&lt;8004500c&gt;] down+0x40/0x88 from[&lt;801c9c10&gt;] xfs_buf_lock+0xcc/0x178<br>
[&lt;801c9c10&gt;] xfs_buf_lock+0xcc/0x178 from[&lt;801b6550&gt;] xfs_getsb+0x38/0x54<br>[&lt;801b6550&gt;] xfs_getsb+0x38/0x54 from[&lt;801d5b00&gt;] xfs_sync_fsdata+0x74/0x17c<br>[&lt;801d5b00&gt;] xfs_sync_fsdata+0x74/0x17c from[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68<br>
[&lt;801d690c&gt;] xfs_quiesce_data+0x34/0x68 from[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec<br>[&lt;801d2b34&gt;] xfs_fs_sync_fs+0x30/0xec from[&lt;800b878c&gt;] __fsync_super+0xa4/0xc8<br>[&lt;800b878c&gt;] __fsync_super+0xa4/0xc8 from[&lt;800b87c4&gt;] fsync_super+0x14/0x28<br>
[&lt;800b87c4&gt;] fsync_super+0x14/0x28 from[&lt;800e5cc4&gt;] fsync_bdev+0x28/0x64<br>[&lt;800e5cc4&gt;] fsync_bdev+0x28/0x64 from[&lt;801faaa8&gt;] invalidate_partition+0x28/0x60<br>[&lt;801faaa8&gt;] invalidate_partition+0x28/0x60 from[&lt;801001b0&gt;] del_gendisk+0x40/0xf0<br>
[&lt;801001b0&gt;] del_gendisk+0x40/0xf0 from[&lt;8025cb50&gt;] sd_remove+0x40/0xc8<br>[&lt;8025cb50&gt;] sd_remove+0x40/0xc8 from[&lt;80259b5c&gt;] scsi_bus_remove+0x44/0x5c<br>[&lt;80259b5c&gt;] scsi_bus_remove+0x44/0x5c from[&lt;802463d4&gt;] __device_release_driver+0x80/0xbc<br>
[&lt;802463d4&gt;] __device_release_driver+0x80/0xbc from[&lt;80246540&gt;] device_release_driver+0x28/0x40<br>[&lt;80246540&gt;] device_release_driver+0x28/0x40 from[&lt;802457b8&gt;] bus_remove_device+0xb0/0xf0<br>[&lt;802457b8&gt;] bus_remove_device+0xb0/0xf0 from[&lt;80243b30&gt;] device_del+0x120/0x1a8<br>
[&lt;80243b30&gt;] device_del+0x120/0x1a8 from[&lt;80259f50&gt;] __scsi_remove_device+0x40/0x98<br>[&lt;80259f50&gt;] __scsi_remove_device+0x40/0x98 from[&lt;802569cc&gt;] scsi_forget_host+0x88/0xfc<br>[&lt;802569cc&gt;] scsi_forget_host+0x88/0xfc from[&lt;8024f34c&gt;] scsi_remove_host+0xf8/0x1ac<br>
[&lt;8024f34c&gt;] scsi_remove_host+0xf8/0x1ac from[&lt;e039d6bc&gt;] quiesce_and_remove_host+0x9c/0x12c [usb_storage]<br>[&lt;e039d6bc&gt;] quiesce_and_remove_host+0x9c/0x12c [usb_storage] from[&lt;e039d83c&gt;] usb_stor_disconnect+0x20/0x3c [usb_storage]<br>
[&lt;e039d83c&gt;] usb_stor_disconnect+0x20/0x3c [usb_storage] from[&lt;e0367c58&gt;] usb_unbind_interface+0x68/0x128 [usbcore]<br>[&lt;e0367c58&gt;] usb_unbind_interface+0x68/0x128 [usbcore] from[&lt;802463d4&gt;] __device_release_driver+0x80/0xbc<br>
[&lt;802463d4&gt;] __device_release_driver+0x80/0xbc from[&lt;80246540&gt;] device_release_driver+0x28/0x40<br>[&lt;80246540&gt;] device_release_driver+0x28/0x40 from[&lt;802457b8&gt;] bus_remove_device+0xb0/0xf0<br>[&lt;802457b8&gt;] bus_remove_device+0xb0/0xf0 from[&lt;80243b30&gt;] device_del+0x120/0x1a8<br>
[&lt;80243b30&gt;] device_del+0x120/0x1a8 from[&lt;e0364854&gt;] usb_disable_device+0x14c/0x234 [usbcore]<br>[&lt;e0364854&gt;] usb_disable_device+0x14c/0x234 [usbcore] from[&lt;e035d6b8&gt;] usb_disconnect+0x170/0x37c [usbcore]<br>
[&lt;e035d6b8&gt;] usb_disconnect+0x170/0x37c [usbcore] from[&lt;e035f264&gt;] hub_thread+0x85c/0x18f8 [usbcore]<br>[&lt;e035f264&gt;] hub_thread+0x85c/0x18f8 [usbcore] from[&lt;8003ff3c&gt;] kthread+0x5c/0xa0<br>[&lt;8003ff3c&gt;] kthread+0x5c/0xa0 from[&lt;80008908&gt;] kernel_thread_helper+0x10/0x18</div>

<div>-------------------------------------------------------------------------------------<br>INFO: task usb_mount:395 blocked for more than 120 seconds.<br>&quot;echo 0 &gt; /proc/sys/kernel/hung_task_timeout_secs&quot; disables this message.<br>
usb_mount        D [86163ae8] 8032cb2c     0   395    371                             (user thread)<br>Stack : ffffff9c 86b71ef0 00400ae0 800c0150 86163c70 8032cb2c 86163ae8 00000002<br>        86bbbf18 86bbbf00 00000000 00000000 86b71f00 86b71ef8 7f8b0670 8032cb2c<br>
        86bbb780 800b2510 00000001 86bbbf00 86bbbf00 8032f024 86bbbf00 800b21c0<br>        86bbbf00 86bbbf00 86b6dc44 86b6dc44 86163ae8 00000002 86b6dc00 86b6dc00<br>        803fe190 800b9350 86bbbf00 86bbbf18 86bbbef8 86bbbf00 86bbbef8 86bbbef8<br>
        ...<br>Call Trace:<br>[&lt;8032ca74&gt;] __schedule+0x618/0x6b8 from[&lt;8032cb2c&gt;] schedule+0x18/0x3c<br>[&lt;8032cb2c&gt;] schedule+0x18/0x3c from[&lt;8032f024&gt;] __down_write_nested+0x104/0x128<br>[&lt;8032f024&gt;] __down_write_nested+0x104/0x128 from[&lt;800b9350&gt;] deactivate_super+0x70/0x110<br>
[&lt;800b9350&gt;] deactivate_super+0x70/0x110 from[&lt;800d122c&gt;] sys_umount+0x310/0x358<br>[&lt;800d122c&gt;] sys_umount+0x310/0x358 from[&lt;8000ff44&gt;] stack_done+0x20/0x3c</div>
<div>-------------------------------------------------------------------------------------<br>Filesystem &quot;sda2&quot;: xfs_log_force: error 5 returned.<br></div>