signal_cond_list(in->waitfor_caps);
}
-void Client::remove_cap(Cap *cap, bool queue_release)
+Cap* Client::remove_cap(Cap *cap, bool queue_release)
{
Inode *in = cap->inode;
MetaSession *session = cap->session;
} else {
cap->cap_item.remove_myself();
delete cap;
+ cap = nullptr;
}
if (!in->is_any_caps()) {
put_snap_realm(in->snaprealm);
in->snaprealm = 0;
}
+ return cap;
}
void Client::remove_all_caps(Inode *in)
// disposable non-auth cap
if (!(get_caps_used(in) & ~oissued & mine)) {
ldout(cct, 20) << " removing unused, unneeded non-auth cap on " << *in << dendl;
- remove_cap(cap, true);
+ cap = remove_cap(cap, true);
trimmed++;
}
} else {
}
++p;
- if (!cap->inode) {
+ if (cap && !cap->inode) {
cap->cap_item.remove_myself();
delete cap;
}
void add_update_cap(Inode *in, MetaSession *session, uint64_t cap_id,
unsigned issued, unsigned seq, unsigned mseq, inodeno_t realm,
int flags, const UserPerm& perms);
- void remove_cap(Cap *cap, bool queue_release);
+ Cap* remove_cap(Cap *cap, bool queue_release);
void remove_all_caps(Inode *in);
void remove_session_caps(MetaSession *session);
void mark_caps_dirty(Inode *in, int caps);