[PATCH] Change the logic in obj_sock_adjust_users()

Dan Smith danms at us.ibm.com
Thu Sep 9 15:25:21 PDT 2010

The explicit decrement of obj->users isn't correct for all cases of
SOCK_DEAD, so this patch changes it to the result of ref_users() to
avoid the false positive in the leak check.  I have confirmed with
sockets in both SOCK_DEAD situations that we don't leak them with
this change.

Signed-off-by: Dan Smith <danms at us.ibm.com>
 kernel/checkpoint/objhash.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/checkpoint/objhash.c b/kernel/checkpoint/objhash.c
index a7b8b7d..62c34ff 100644
--- a/kernel/checkpoint/objhash.c
+++ b/kernel/checkpoint/objhash.c
@@ -546,7 +546,7 @@ static void ckpt_obj_users_inc(struct ckpt_ctx *ctx, void *ptr, int increment)
  * obj_sock_adjust_users - remove implicit reference on DEAD sockets
  * @obj: CKPT_OBJ_SOCK object to adjust
- * Sockets that have been disconnected from their struct file have
+ * Sockets that have been disconnected from their struct file may have
  * a reference count one less than normal sockets.  The objhash's
  * assumption of such a reference is therefore incorrect, so we correct
  * it here.
@@ -556,7 +556,7 @@ static inline void obj_sock_adjust_users(struct ckpt_obj *obj)
 	struct sock *sk = (struct sock *)obj->ptr;
 	if (sock_flag(sk, SOCK_DEAD)) {
-		obj->users--;
+		obj->users = obj->ops->ref_users(obj->ptr);
 		ckpt_debug("Adjusting SOCK %i count to %i\n",
 			   obj->objref, obj->users);

More information about the Containers mailing list