[PATCH] ext3_getblk() should handle HOLE correctly
[linux-2.6.git] / fs / ext3 / inode.c
index c5ee9f0..0f0b1ea 100644 (file)
@@ -1009,11 +1009,14 @@ struct buffer_head *ext3_getblk(handle_t *handle, struct inode *inode,
        buffer_trace_init(&dummy.b_history);
        err = ext3_get_blocks_handle(handle, inode, block, 1,
                                        &dummy, create, 1);
-       if (err == 1) {
+       /*
+        * ext3_get_blocks_handle() returns number of blocks
+        * mapped. 0 in case of a HOLE.
+        */
+       if (err > 0) {
+               if (err > 1)
+                       WARN_ON(1);
                err = 0;
-       } else if (err >= 0) {
-               WARN_ON(1);
-               err = -EIO;
        }
        *errp = err;
        if (!err && buffer_mapped(&dummy)) {