Commit a85f50b6 authored by Yan, Zheng's avatar Yan, Zheng Committed by Alex Elder

ceph: Fix __ceph_do_pending_vmtruncate

we should set i_truncate_pending to 0 after page cache is truncated
to i_truncate_size
Signed-off-by: default avatarYan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: default avatarSage Weil <sage@inktank.com>
parent 0685235f
...@@ -1466,7 +1466,7 @@ void __ceph_do_pending_vmtruncate(struct inode *inode) ...@@ -1466,7 +1466,7 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
{ {
struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_inode_info *ci = ceph_inode(inode);
u64 to; u64 to;
int wrbuffer_refs, wake = 0; int wrbuffer_refs, finish = 0;
retry: retry:
spin_lock(&ci->i_ceph_lock); spin_lock(&ci->i_ceph_lock);
...@@ -1498,15 +1498,18 @@ void __ceph_do_pending_vmtruncate(struct inode *inode) ...@@ -1498,15 +1498,18 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
truncate_inode_pages(inode->i_mapping, to); truncate_inode_pages(inode->i_mapping, to);
spin_lock(&ci->i_ceph_lock); spin_lock(&ci->i_ceph_lock);
ci->i_truncate_pending--; if (to == ci->i_truncate_size) {
if (ci->i_truncate_pending == 0) ci->i_truncate_pending = 0;
wake = 1; finish = 1;
}
spin_unlock(&ci->i_ceph_lock); spin_unlock(&ci->i_ceph_lock);
if (!finish)
goto retry;
if (wrbuffer_refs == 0) if (wrbuffer_refs == 0)
ceph_check_caps(ci, CHECK_CAPS_AUTHONLY, NULL); ceph_check_caps(ci, CHECK_CAPS_AUTHONLY, NULL);
if (wake)
wake_up_all(&ci->i_cap_wq); wake_up_all(&ci->i_cap_wq);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment