|
@@ -222,7 +222,10 @@ static int ocfs2_readpage(struct file *file, struct page *page)
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
|
|
- down_read(&OCFS2_I(inode)->ip_alloc_sem);
|
|
|
|
|
|
+ if (down_read_trylock(&OCFS2_I(inode)->ip_alloc_sem) == 0) {
|
|
|
|
+ ret = AOP_TRUNCATED_PAGE;
|
|
|
|
+ goto out_meta_unlock;
|
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
/*
|
|
* i_size might have just been updated as we grabed the meta lock. We
|
|
* i_size might have just been updated as we grabed the meta lock. We
|
|
@@ -258,6 +261,7 @@ static int ocfs2_readpage(struct file *file, struct page *page)
|
|
ocfs2_data_unlock(inode, 0);
|
|
ocfs2_data_unlock(inode, 0);
|
|
out_alloc:
|
|
out_alloc:
|
|
up_read(&OCFS2_I(inode)->ip_alloc_sem);
|
|
up_read(&OCFS2_I(inode)->ip_alloc_sem);
|
|
|
|
+out_meta_unlock:
|
|
ocfs2_meta_unlock(inode, 0);
|
|
ocfs2_meta_unlock(inode, 0);
|
|
out:
|
|
out:
|
|
if (unlock)
|
|
if (unlock)
|