// cons/des
Client::Client(Messenger *m, MonClient *mc)
- : Dispatcher(m->cct), cct(m->cct), timer(m->cct, client_lock), client_lock("Client::client_lock"),
+ : Dispatcher(m->cct), cct(m->cct), timer(m->cct, client_lock),
+ ino_invalidate_cb(NULL),
+ client_lock("Client::client_lock"),
filer_flags(0)
{
// which client am i?
<< " is_delayed=" << is_delayed
<< dendl;
- if (in->snapid != CEPH_NOSNAP) return; //snap caps last forever, can't write
+ if (in->snapid != CEPH_NOSNAP)
+ return; //snap caps last forever, can't write
if (in->caps.empty())
return; // guard if at end of func
if (cct->_conf->client_oc)
objectcacher->release_set(&in->oset);
+
+ if (ino_invalidate_cb)
+ ino_invalidate_cb(ino_invalidate_cb_handle, in->vino(), 0, 0);
}
void Client::_invalidate_inode_cache(Inode *in, int64_t off, int64_t len)
filer->file_to_extents(in->ino, &in->layout, off, len, ls);
objectcacher->truncate_set(&in->oset, ls);
}
+
+ if (ino_invalidate_cb)
+ ino_invalidate_cb(ino_invalidate_cb_handle, in->vino(), off, len);
}
return statfs(0, stbuf);
}
+void Client::ll_register_ino_invalidate_cb(client_ino_callback_t cb, void *handle)
+{
+ Mutex::Locker l(client_lock);
+ ino_invalidate_cb = cb;
+ ino_invalidate_cb_handle = handle;
+}
int Client::_sync_fs()
{
class MetaRequest;
+typedef void (*client_ino_callback_t)(void *handle, vinodeno_t ino, int64_t off, int64_t len);
// ========================================================
SafeTimer timer;
+ client_ino_callback_t ino_invalidate_cb;
+ void *ino_invalidate_cb_handle;
+
Context *tick_event;
utime_t last_cap_renew;
void renew_caps();
int ll_fsync(Fh *fh, bool syncdataonly);
int ll_release(Fh *fh);
int ll_statfs(vinodeno_t vino, struct statvfs *stbuf);
+
+ void ll_register_ino_invalidate_cb(client_ino_callback_t cb, void *handle);
};
#endif