diff -NurpP linux-2.6.16-vs2.1.1-rc14.3/drivers/block/loop.c linux-2.6.16-vs2.1.1-rc14.4/drivers/block/loop.c --- linux-2.6.16-vs2.1.1-rc14.3/drivers/block/loop.c 2006-03-24 03:37:07 +0100 +++ linux-2.6.16-vs2.1.1-rc14.4/drivers/block/loop.c 2006-03-25 02:30:37 +0100 @@ -747,6 +747,7 @@ static int loop_set_fd(struct loop_devic int lo_flags = 0; int error; loff_t size; + pid_t pid; /* This is safe, since we have a reference from open(). */ __module_get(THIS_MODULE); @@ -839,10 +840,14 @@ static int loop_set_fd(struct loop_devic set_blocksize(bdev, lo_blocksize); - kernel_thread(loop_thread, lo, CLONE_KERNEL); + pid = kernel_thread(loop_thread, lo, CLONE_KERNEL); + if (pid < 0) + goto out_err; wait_for_completion(&lo->lo_done); return 0; + out_err: + error = (int)pid; out_putf: fput(file); out: