diff options
author | Henry C Chang <henry.cy.chang@gmail.com> | 2011-05-11 12:29:54 +0200 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2011-05-11 19:44:48 +0200 |
commit | d3d0720d4a7a46e93e055e5b0f1a8bd612743ed6 (patch) | |
tree | 39d657139336012f05d7573116a0ba2405e85de7 /fs/ceph/super.h | |
parent | ceph: fix list_add in ceph_put_snap_realm (diff) | |
download | linux-d3d0720d4a7a46e93e055e5b0f1a8bd612743ed6.tar.xz linux-d3d0720d4a7a46e93e055e5b0f1a8bd612743ed6.zip |
ceph: do not use i_wrbuffer_ref as refcount for Fb cap
We increments i_wrbuffer_ref when taking the Fb cap. This breaks
the dirty page accounting and causes looping in
__ceph_do_pending_vmtruncate, and ceph client hangs.
This bug can be reproduced occasionally by running blogbench.
Add a new field i_wb_ref to inode and dedicate it to Fb reference
counting.
Signed-off-by: Henry C Chang <henry.cy.chang@gmail.com>
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r-- | fs/ceph/super.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index b1f1b8bb1271..f5cabefa98dc 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -293,7 +293,7 @@ struct ceph_inode_info { /* held references to caps */ int i_pin_ref; - int i_rd_ref, i_rdcache_ref, i_wr_ref; + int i_rd_ref, i_rdcache_ref, i_wr_ref, i_wb_ref; int i_wrbuffer_ref, i_wrbuffer_ref_head; u32 i_shared_gen; /* increment each time we get FILE_SHARED */ u32 i_rdcache_gen; /* incremented each time we get FILE_CACHE. */ |