ceph: fix rdcache_gen usage and invalidate
authorSage Weil <sage@newdream.net>
Thu, 4 Nov 2010 18:05:05 +0000 (11:05 -0700)
committerSage Weil <sage@newdream.net>
Mon, 8 Nov 2010 15:29:05 +0000 (07:29 -0800)
commitcd045cb42a266882ac24bc21a3a8d03683c72954
tree2938560e8362804e829cc9feb23ef746d354140b
parentfeb4cc9bb433bf1491ac5ffbba133f3258dacf06
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>
fs/ceph/caps.c
fs/ceph/inode.c
fs/ceph/super.h
This page took 0.024459 seconds and 5 git commands to generate.