Skip to content

Commit

Permalink
uclient: Put some guards up around the Inode->cap map accesses
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Farnum committed Oct 2, 2009
1 parent 12aa62f commit 5a9d225
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/client/Client.cc
Expand Up @@ -979,8 +979,11 @@ int Client::encode_inode_release(Inode *in, MClientRequest *req,
<< " mds:" << mds << ", drop:" << drop << ", unless:" << unless
<< ", have:" << ", force:" << force << ")" << dendl;
int released = 0;
InodeCap *caps = in->caps[mds];
if (drop & caps->issued &&
InodeCap *caps = NULL;
if (in->caps.count(mds))
caps = in->caps[mds];
if (caps &&
drop & caps->issued &&
!(unless & caps->issued)) {
dout(25) << "Dropping caps. Initial " << ccap_string(caps->issued) << dendl;
caps->issued &= ~drop;
Expand All @@ -989,7 +992,7 @@ int Client::encode_inode_release(Inode *in, MClientRequest *req,
force = 1;
dout(25) << "Now have: " << ccap_string(caps->issued) << dendl;
}
if (force) {
if (force && caps) {
ceph_mds_request_release rel;
rel.ino = in->ino;
rel.cap_id = caps->cap_id;
Expand Down Expand Up @@ -2083,6 +2086,11 @@ void Client::add_update_cap(Inode *in, int mds, __u64 cap_id,
void Client::remove_cap(Inode *in, int mds)
{
dout(10) << "remove_cap mds" << mds << " on " << *in << dendl;
if (!in->caps.count(mds)) {
dout(10) << "no caps from mds " << mds << "on this inode!\n"
<< "remove_cap returning" << dendl;
return;
}
InodeCap *cap = in->caps[mds];
MDSSession *session = &mds_sessions[mds];

Expand Down Expand Up @@ -2462,6 +2470,7 @@ void Client::handle_caps(MClientCaps *m)
delete m;
return;
}

InodeCap *cap = in->caps[mds];

switch (m->get_op()) {
Expand Down

0 comments on commit 5a9d225

Please sign in to comment.