ino_invalidate_cb(NULL),
dentry_invalidate_cb(NULL),
getgroups_cb(NULL),
+ require_remount(false),
async_ino_invalidator(m->cct),
async_dentry_invalidator(m->cct),
interrupt_finisher(m->cct),
client_t whoami = client->get_nodeid();
lderr(client->cct) << "tried to remount (to trim kernel dentries) and got error "
<< r << dendl;
- if (client->cct->_conf->client_die_on_failed_remount) {
+ if (client->require_remount) {
assert(0 == "failed to remount for kernel dentry trimming");
}
}
getgroups_cb = args->getgroups_cb;
}
+int Client::test_remount()
+{
+ int r = 0;
+
+ if (remount_cb) {
+ int s = remount_cb(callback_handle);
+ if (s) {
+ lderr(cct) << "Failed to invoke remount, needed to ensure kernel dcache consistency"
+ << dendl;
+ }
+ if (cct->_conf->client_die_on_failed_remount) {
+ require_remount = true;
+ r = s;
+ }
+ }
+ return r;
+}
+
int Client::_sync_fs()
{
ldout(cct, 10) << "_sync_fs" << dendl;
client_ino_callback_t ino_invalidate_cb;
client_dentry_callback_t dentry_invalidate_cb;
client_getgroups_callback_t getgroups_cb;
+ bool require_remount;
Finisher async_ino_invalidator;
Finisher async_dentry_invalidator;
int ll_osdaddr(int osd, char* buf, size_t size);
void ll_register_callbacks(struct client_callback_args *args);
+ int test_remount();
};
#endif