The logic in put_cap_ref doesn't do anything but inode->put_cap_ref
if cap is set to CEPH_CAP_FILE_CACHE, so checkafter isn't needed.
Signed-off-by: Sam Lang <sam.lang@inktank.com>
// flush dirty data (from objectcache)
-void Client::_release(Inode *in, bool checkafter)
+void Client::_release(Inode *in)
{
if (in->cap_refs[CEPH_CAP_FILE_CACHE]) {
_invalidate_inode_cache(in);
-
- if (checkafter)
- put_cap_ref(in, CEPH_CAP_FILE_CACHE);
- else
- in->put_cap_ref(CEPH_CAP_FILE_CACHE);
+ in->put_cap_ref(CEPH_CAP_FILE_CACHE);
}
}
cap->issued = new_caps;
if ((~cap->issued & old_caps) & CEPH_CAP_FILE_CACHE)
- _release(in, false);
+ _release(in);
if (((used & ~new_caps) & CEPH_CAP_FILE_BUFFER) &&
!_flush(in)) {
void _invalidate_inode_cache(Inode *in);
void _invalidate_inode_cache(Inode *in, int64_t off, int64_t len);
- void _release(Inode *in, bool checkafter=true);
+ void _release(Inode *in);
bool _flush(Inode *in);
void _flushed(Inode *in);
void flush_set_callback(ObjectCacher::ObjectSet *oset);
bool Inode::put_cap_ref(int cap)
{
+ // if cap is always a single bit (which it seems to be)
+ // all this logic is equivalent to:
+ // if (--cap_refs[c]) return false; else return true;
bool last = false;
int n = 0;
while (cap) {