diff options
author | Sage Weil <sage@newdream.net> | 2010-11-04 11:05:05 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-11-08 07:29:05 -0800 |
commit | cd045cb42a266882ac24bc21a3a8d03683c72954 (patch) | |
tree | 2938560e8362804e829cc9feb23ef746d354140b /fs/ceph/super.h | |
parent | feb4cc9bb433bf1491ac5ffbba133f3258dacf06 (diff) | |
download | op-kernel-dev-cd045cb42a266882ac24bc21a3a8d03683c72954.zip op-kernel-dev-cd045cb42a266882ac24bc21a3a8d03683c72954.tar.gz |
ceph: fix rdcache_gen usage and invalidate
We used to use rdcache_gen to indicate whether we "might" have cached
pages. Now we just look at the mapping to determine that. However, some
old behavior remains from that transition.
First, rdcache_gen == 0 no longer means we have no pages. That can happen
at any time (presumably when we carry FILE_CACHE). We should not reset it
to zero, and we should not check that it is zero.
That means that the only purpose for rdcache_revoking is to resolve races
between new issues of FILE_CACHE and an async invalidate. If they are
equal, we should invalidate. On success, we decrement rdcache_revoking,
so that it is no longer equal to rdcache_gen. Similarly, if we success
in doing a sync invalidate, set revoking = gen - 1. (This is a small
optimization to avoid doing unnecessary invalidate work and does not
affect correctness.)
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r-- | fs/ceph/super.h | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 1886294..7f01728 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -293,9 +293,7 @@ struct ceph_inode_info { int i_rd_ref, i_rdcache_ref, i_wr_ref; int i_wrbuffer_ref, i_wrbuffer_ref_head; u32 i_shared_gen; /* increment each time we get FILE_SHARED */ - u32 i_rdcache_gen; /* we increment this each time we get - FILE_CACHE. If it's non-zero, we - _may_ have cached pages. */ + u32 i_rdcache_gen; /* incremented each time we get FILE_CACHE. */ u32 i_rdcache_revoking; /* RDCACHE gen to async invalidate, if any */ struct list_head i_unsafe_writes; /* uncommitted sync writes */ |