Messages in this thread Patch in this message | | | Subject | USB hangs | From | Alan Cox <> | Date | Sun, 11 Jan 2004 00:07:17 +0000 |
| |
With the various fixes people had been posting USB storage writing was still hanging repeatedly when doing a 20Gb rsync to usb-storage disks with a low memory system. Doing things like while(true) sync() made it hang even more often.
After a bit of digging the following seems to fix it
Not sure if 2.6 needs this as well.
The failure path seems to be
->scsi_done in the USB storage thread issues a new command causes USB to kmalloc GFP_KERNEL causes a page out queues a page out to the USB storage thread Deadlock.
Setting PF_MEMALLOC should stop the storage thread ever causing pageout itself so deadlocking.
--- drivers/usb/storage/usb.c~ 2004-01-09 02:06:35.000000000 +0000 +++ drivers/usb/storage/usb.c 2004-01-09 02:06:35.000000000 +0000 @@ -332,6 +332,8 @@ /* set our name for identification purposes */ sprintf(current->comm, "usb-storage-%d", us->host_number); + + current->flags |= PF_MEMALLOC; unlock_kernel(); | |