Tao Ma
2008-Sep-02 17:57 UTC
[Ocfs2-devel] [PATCH 1/1] ocfs2: Fix a bug in direct IO read.
ocfs2 will become read-only if we try to read the bytes which pass
the end of i_size. This can be easily reproduced by following steps:
1. mkfs a ocfs2 volume with bs=4k cs=4k and nosparse.
2. create a small file(say less than 100 bytes) and we will create the file
which is allocated 1 cluster.
3. read 8196 bytes from the kernel using O_DIRECT which exceeds the limit.
4. The ocfs2 volume becomes read-only and dmesg shows:
OCFS2: ERROR (device sda13): ocfs2_direct_IO_get_blocks:
Inode 66010 has a hole at block 1
File system is now read-only due to the potential of on-disk corruption.
Please run fsck.ocfs2 once the file system is unmounted.
So suppress the ERROR message.
Signed-off-by: Tao Ma <tao.ma at oracle.com>
---
fs/ocfs2/aops.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index 80fa3fc..259775e 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -594,7 +594,7 @@ static int ocfs2_direct_IO_get_blocks(struct inode *inode,
sector_t iblock,
goto bail;
}
- if (!ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)) && !p_blkno) {
+ if (!ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)) && !p_blkno
&& create) {
ocfs2_error(inode->i_sb,
"Inode %llu has a hole at block %llu\n",
(unsigned long long)OCFS2_I(inode)->ip_blkno,
--
1.5.4.GIT
Mark Fasheh
2008-Sep-03 03:53 UTC
[Ocfs2-devel] [PATCH 1/1] ocfs2: Fix a bug in direct IO read.
On Wed, Sep 03, 2008 at 01:57:14AM +0800, Tao Ma wrote:> ocfs2 will become read-only if we try to read the bytes which pass > the end of i_size. This can be easily reproduced by following steps: > 1. mkfs a ocfs2 volume with bs=4k cs=4k and nosparse. > 2. create a small file(say less than 100 bytes) and we will create the file > which is allocated 1 cluster. > 3. read 8196 bytes from the kernel using O_DIRECT which exceeds the limit. > 4. The ocfs2 volume becomes read-only and dmesg shows: > OCFS2: ERROR (device sda13): ocfs2_direct_IO_get_blocks: > Inode 66010 has a hole at block 1> Inode 66010 has a hole at block 1 > File system is now read-only due to the potential of on-disk corruption. > Please run fsck.ocfs2 once the file system is unmounted. > > So suppress the ERROR message.Ok, great - thanks Tao. --Mark -- Mark Fasheh