Browse Source

ceph: fix leak of osd authorizer

Release the ceph_authorizer when releasing osd state.

Signed-off-by: Sage Weil <sage@newdream.net>
Sage Weil 15 years ago
parent
commit
79494d1b9b
1 changed files with 6 additions and 1 deletions
  1. 6 1
      fs/ceph/osd_client.c

+ 6 - 1
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),
 	dout("put_osd %p %d -> %d\n", osd, atomic_read(&osd->o_ref),
 	     atomic_read(&osd->o_ref) - 1);
 	     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);
 		kfree(osd);
+	}
 }
 }
 
 
 /*
 /*