This is the patch for check do_direct_IO() return val. At do_direct_IO(), sometimes dio_get_page() will return -EFAULT/-ENOMEM, according to orig source, it will go on left work. buf for dio_get_page() return a error will made many useful member of dio not initialized like dio->map_bh and others, at this point, kernel will panic.
Signed-off-by: Joe Jin <[EMAIL PROTECTED]> --- --- linux-2.6.22/fs/direct-io.c.orig 2007-07-26 11:32:27.000000000 +0800 +++ linux-2.6.22/fs/direct-io.c 2007-07-26 11:33:58.000000000 +0800 @@ -1031,7 +1031,9 @@ direct_io_worker(int rw, struct kiocb *i ((dio->final_block_in_request - dio->block_in_file) << blkbits); - if (ret) { + if (ret == -EFAULT || ret == -ENOMEM) + goto out; + else if (ret) { dio_cleanup(dio); break; } @@ -1113,6 +1115,7 @@ direct_io_worker(int rw, struct kiocb *i } else BUG_ON(ret != -EIOCBQUEUED); +out: return ret; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/