diff options
author | Sage Weil <sage@newdream.net> | 2010-05-27 14:15:49 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-05-29 09:42:04 -0700 |
commit | 79494d1b9b92259eb40ea6e939ba5aff4b8de5f1 (patch) | |
tree | 4e646e85059ba65083896ba3454b9a30a146b6ff /fs/ceph/osd_client.c | |
parent | a922d38fd10d55d5033f10df15baf966e8f5b18c (diff) | |
download | op-kernel-dev-79494d1b9b92259eb40ea6e939ba5aff4b8de5f1.zip op-kernel-dev-79494d1b9b92259eb40ea6e939ba5aff4b8de5f1.tar.gz |
ceph: fix leak of osd authorizer
Release the ceph_authorizer when releasing osd state.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/osd_client.c')
-rw-r--r-- | fs/ceph/osd_client.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c index afa7bb3..d25b4ad 100644 --- a/fs/ceph/osd_client.c +++ b/fs/ceph/osd_client.c @@ -361,8 +361,13 @@ static void put_osd(struct ceph_osd *osd) { dout("put_osd %p %d -> %d\n", osd, atomic_read(&osd->o_ref), atomic_read(&osd->o_ref) - 1); - if (atomic_dec_and_test(&osd->o_ref)) + if (atomic_dec_and_test(&osd->o_ref)) { + struct ceph_auth_client *ac = osd->o_osdc->client->monc.auth; + + if (osd->o_authorizer) + ac->ops->destroy_authorizer(ac, osd->o_authorizer); kfree(osd); + } } /* |