if (pxlocker) *pxlocker = (xlocker >> shift) & mask;
return (c >> shift) & mask;
}
+ bool is_any_caps_wanted() {
+ for (map<client_t,Capability*>::iterator it = client_caps.begin();
+ it != client_caps.end();
+ it++)
+ if (it->second->wanted())
+ return true;
+ return false;
+ }
int get_caps_wanted(int *ploner = 0, int *pother = 0, int shift = 0, int mask = 0xffff) {
int w = 0;
int loner = 0, other = 0;
// newer log segments.
LogEvent *le;
EMetaBlob *metablob;
- if (in->is_any_caps()) {
+ if (in->is_any_caps_wanted()) {
EOpen *eo = new EOpen(mds->mdlog);
eo->add_ino(in->ino());
metablob = &eo->metablob;
CInode *cur = cap->get_inode();
if (cap->wanted() == 0) {
if (cur->xlist_open_file.is_on_xlist() &&
- cur->get_caps_wanted() == 0) {
- dout(10) << " removing from open file list " << *cur << dendl;
+ !cur->is_any_caps_wanted()) {
+ dout(10) << " removing unwanted file from open file list " << *cur << dendl;
cur->xlist_open_file.remove_myself();
}
} else {
while (!q.end()) {
CInode *in = *q;
++q;
- if (!in->is_any_caps()) {
- dout(10) << " unlisting capless inode " << *in << dendl;
+ if (!in->is_any_caps_wanted()) {
+ dout(10) << " unlisting unwanted/capless inode " << *in << dendl;
in->xlist_open_file.remove_myself();
}
}
CInode *in = *p;
++p;
if (in->is_any_caps()) {
- if (in->get_caps_wanted()) {
+ if (in->is_any_caps_wanted()) {
dout(20) << "try_to_expire requeueing open file " << *in << dendl;
if (!le) le = new EOpen(mds->mdlog);
le->add_clean_inode(in);