diff -urN 2.4.19pre7ac1/drivers/block/loop.c 2.4.19pre7ac2/drivers/block/loop.c --- 2.4.19pre7ac1/drivers/block/loop.c Fri Apr 19 02:13:08 2002 +++ 2.4.19pre7ac2/drivers/block/loop.c Sat Apr 20 04:07:21 2002 @@ -418,6 +418,7 @@ break; run_task_queue(&tq_disk); + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(HZ); } while (1); memset(bh, 0, sizeof(*bh)); @@ -437,6 +438,7 @@ break; run_task_queue(&tq_disk); + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(HZ); } while (1); @@ -565,6 +567,7 @@ daemonize(); exit_files(current); + reparent_to_init(); sprintf(current->comm, "loop%d", lo->lo_number); @@ -644,7 +647,7 @@ lo_device = inode->i_rdev; if (lo_device == dev) { error = -EBUSY; - goto out; + goto out_putf; } } else if (S_ISREG(inode->i_mode)) { struct address_space_operations *aops = inode->i_mapping->a_ops;