Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp677536ybi; Fri, 31 May 2019 07:22:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqxwjIMy6DDcQPr21sVqWHXy0S5qtzpM46FQt71B2y1dzlJmZEqigKGdQ8dWJk+vBT10Rrpo X-Received: by 2002:a62:e217:: with SMTP id a23mr10386075pfi.128.1559312523354; Fri, 31 May 2019 07:22:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559312523; cv=none; d=google.com; s=arc-20160816; b=KnuVAhAObiBWY4V+Ov6eCXYkbrqstD/JT0P3VSiJZYtj1cuf0rJKU5DQlZugqt520N +h9oKq4KyIm7vA2+H9SfFJS3rymbaCoPspJ/DQX/MoT2YP7vAYuvns/dd5NZUvVXBkPG fOTQ+0sY2yI8Aix1138gH6MviLFWyMtTOV8LZwhDQ4b5+aH6d4eBZF71d6VlLJhLY07X fn1Q7SvFtypAsisSNBgdxIj49O0Nc4rwWEH0SlsgTHaOvHzS0PglZOoueI1L42/Kf5Ks bYjUq34UjPymIKi4ABR/Az1RPhuZccM1PNsq6RhTPT4ODyAOTFlPf96aF41WHtQ12Nex ZynQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:content-id:mime-version :subject:cc:to:references:in-reply-to:from:organization; bh=F+DMsTXVcGXPJQADkZEnHNGwsFP5UAdtPZMQJbLLuuk=; b=t4XJ8UEta9vJ75r7PWJ1ub0OsnPb/sX20KHsFpCx4Xc2fKmTpARIJ9Z1Twmk1Mz41S 2hGr4RuwuOPFohZ4yiQdRegzgwkIC8rsDlrPqQZNSwffJt0QzYRuTlAMQQbROmmlfqNb XtuotPEgT/pl+PfHJquDRQnbvSAu9N1iLftiOYCiyLZ84soDNhzRWz1Covkn/r4q/apF Gvbkp/6axQpwJc7otTVY8zA50+5q5evb7eTrQktPvWOuM7dCtEefpOeLSoyDVW+U0Pmb Noesz1RKmxmJnBwOMev2+X3CteuHdc03KyF4dAs/bjUuLTs5zox/zF94Wdu4PuMOr4kZ oUpw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y5si6030793plk.366.2019.05.31.07.21.47; Fri, 31 May 2019 07:22:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726736AbfEaOUU (ORCPT + 99 others); Fri, 31 May 2019 10:20:20 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47652 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726037AbfEaOUT (ORCPT ); Fri, 31 May 2019 10:20:19 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DD64BB5C01; Fri, 31 May 2019 14:20:18 +0000 (UTC) Received: from warthog.procyon.org.uk (ovpn-120-173.rdu2.redhat.com [10.10.120.173]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2128E7C5AD; Fri, 31 May 2019 14:20:12 +0000 (UTC) Organization: Red Hat UK Ltd. Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 3798903 From: David Howells In-Reply-To: <20190531132620.GC2606@hirez.programming.kicks-ass.net> References: <20190531132620.GC2606@hirez.programming.kicks-ass.net> <20190531111445.GO2677@hirez.programming.kicks-ass.net> <20190528162603.GA24097@kroah.com> <155905930702.7587.7100265859075976147.stgit@warthog.procyon.org.uk> <155905931502.7587.11705449537368497489.stgit@warthog.procyon.org.uk> <4031.1559064620@warthog.procyon.org.uk> <20190528231218.GA28384@kroah.com> <31936.1559146000@warthog.procyon.org.uk> <16193.1559163763@warthog.procyon.org.uk> <21942.1559304135@warthog.procyon.org.uk> To: Peter Zijlstra Cc: dhowells@redhat.com, Jann Horn , Greg KH , Al Viro , raven@themaw.net, linux-fsdevel , Linux API , linux-block@vger.kernel.org, keyrings@vger.kernel.org, linux-security-module , kernel list , Kees Cook , Kernel Hardening Subject: Re: [PATCH 1/7] General notification queue with user mmap()'able ring buffer MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <605.1559312411.1@warthog.procyon.org.uk> Date: Fri, 31 May 2019 15:20:12 +0100 Message-ID: <606.1559312412@warthog.procyon.org.uk> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 31 May 2019 14:20:19 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Peter Zijlstra wrote: > Is it not the responsibility of the task that affects the 1->0 > transition to actually free the memory? > > That is, I'm expecting the '...' in both cases above the include the > actual freeing of the object. If this is not the case, then @usage is > not a reference count. Yes. The '...' does the freeing. It seemed unnecessary to include the code ellipsised there since it's not the point of the discussion, but if you want the full function: void afs_put_call(struct afs_call *call) { struct afs_net *net = call->net; int n = atomic_dec_return(&call->usage); int o = atomic_read(&net->nr_outstanding_calls); trace_afs_call(call, afs_call_trace_put, n + 1, o, __builtin_return_address(0)); ASSERTCMP(n, >=, 0); if (n == 0) { ASSERT(!work_pending(&call->async_work)); ASSERT(call->type->name != NULL); if (call->rxcall) { rxrpc_kernel_end_call(net->socket, call->rxcall); call->rxcall = NULL; } if (call->type->destructor) call->type->destructor(call); afs_put_server(call->net, call->server); afs_put_cb_interest(call->net, call->cbi); afs_put_addrlist(call->alist); kfree(call->request); trace_afs_call(call, afs_call_trace_free, 0, o, __builtin_return_address(0)); kfree(call); o = atomic_dec_return(&net->nr_outstanding_calls); if (o == 0) wake_up_var(&net->nr_outstanding_calls); } } You can see the kfree(call) in there. Peter Zijlstra wrote: > (and it has already been established that refcount_t doesn't work for > usage count scenarios) ? Does that mean struct kref doesn't either? > Aside from that, is the problem that refcount_dec_and_test() returns a > boolean (true - last put, false - not last) instead of the refcount > value? This does indeed make it hard to print the exact count value for > the event. That is the problem, yes - well, one of them: refcount_inc() doesn't either. David