From: Andrew Morton As points out, quotas fail because they don't expect ext3_getblk() to return 1 on success. So convert 1 into 0 immediately. Cc: Mingming Cao Signed-off-by: Andrew Morton --- fs/ext3/inode.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff -puN fs/ext3/inode.c~ext3-get-blocks-maping-multiple-blocks-at-a-once-ext3_getblk-fix fs/ext3/inode.c --- devel/fs/ext3/inode.c~ext3-get-blocks-maping-multiple-blocks-at-a-once-ext3_getblk-fix 2006-01-13 12:34:37.000000000 -0800 +++ devel-akpm/fs/ext3/inode.c 2006-01-13 12:35:39.000000000 -0800 @@ -899,8 +899,16 @@ struct buffer_head *ext3_getblk(handle_t dummy.b_state = 0; dummy.b_blocknr = -1000; buffer_trace_init(&dummy.b_history); - *errp = ext3_get_blocks_handle(handle, inode, block, 1, &dummy, create, 1); - if ((*errp == 1 ) && buffer_mapped(&dummy)) { + err = ext3_get_blocks_handle(handle, inode, block, 1, + &dummy, create, 1); + if (err == 1) { + err = 0; + } else if (err >= 0) { + WARN_ON(1); + err = -EIO; + } + *errp = err; + if (!err && buffer_mapped(&dummy)) { struct buffer_head *bh; bh = sb_getblk(inode->i_sb, dummy.b_blocknr); if (!bh) { _