public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Markus Elfring <Markus.Elfring@web.de>
To: Dan Williams <dan.j.williams@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Jonathan Corbet <corbet@lwn.net>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-pci@vger.kernel.org, kernel-janitors@vger.kernel.org
Cc: "Bjorn Helgaas" <bhelgaas@google.com>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
	"Ira Weiny" <ira.weiny@intel.com>,
	"Jesse Brandeburg" <jesse.brandeburg@intel.com>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
	"Julia Lawall" <Julia.Lawall@inria.fr>,
	"Lukas Wunner" <lukas.wunner@intel.com>
Subject: Re: [PATCH] cleanup: Add usage and style documentation
Date: Fri, 22 Mar 2024 14:00:42 +0100	[thread overview]
Message-ID: <8a1adff2-eb83-4dec-b8d0-1e523245de65@web.de> (raw)
In-Reply-To: <171097196970.1011049.9726486429680041876.stgit@dwillia2-xfh.jf.intel.com>

…
> +++ b/include/linux/cleanup.h
> @@ -4,6 +4,118 @@
>
>  #include <linux/compiler.h>
>
> +/**
> + * DOC: scope-based cleanup helpers
> + *
> + * The "goto error" pattern is notorious for introducing …

Will any other label become more helpful for this description approach?


> + * this tedium and can aid in maintaining FILO (first in last out)
             ⬆
Would an other word be more appropriate here?



> + * contraindicates a pattern like the following:

I would prefer an other wording approach.


> + *	struct pci_dev *dev __free(pci_dev_put) = NULL;

Programmers got used to null pointer initialisations.


> + * In this case @dev is declared in x-mas tree style in a preamble
> + * declaration block. That is problematic because it destroys the
> + * compiler's ability to infer proper unwind order.

Can capabilities be clarified better for the applied compilers?


>                                                      If other cleanup
> + * helpers appeared in such a function that depended on @dev being live
> + * to complete their unwind then using the "struct obj_type *obj
> + * __free(...) = NULL" style is an anti-pattern that potentially causes
> + * a use-after-free bug.

I suggest to reconsider such a development concern in more detail.


> + *	struct pci_dev *dev __free(pci_dev_put) =
> + *		pci_get_slot(parent, PCI_DEVFN(0, 0));
> + *
> + * ...which implies that declaring variables in mid-function scope is
> + * not only allowed, but expected.

* Is there a need to separate the ellipsis from the subsequent word
  by a space character?

* You propose a variable definition without specifying extra curly brackets
  (for another compound statement / code block).
  This can work only if an appropriate pointer is returned by the called function.

* The involved identifiers can occasionally get longer.
  Further code layout challenges would need corresponding clarifications.
  How will the handling of line length concerns evolve?

* I suggest to take another look also at the transformation pattern
  “Reduce Scope of Variable”.
  https://refactoring.com/catalog/reduceScopeOfVariable.html


> + * Conversions of existing code to use cleanup helpers should convert
> + * all resources so that no "goto" unwind statements remain. If not all
> + * resources are amenable to cleanup then additional refactoring is
> + * needed to build helper functions, or the function is simply not a
> + * good candidate for conversion.

* How do you think about to specify any more resource cleanup functions
  for growing usage of “smart pointers”?

* Would you like to extend the specification of function pairs for
  improved applications of guard variants?


Regards,
Markus

  parent reply	other threads:[~2024-03-22 13:01 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-20 22:04 [PATCH] cleanup: Add usage and style documentation Dan Williams
2024-03-22  5:43 ` Tian, Kevin
2024-03-23  0:17   ` Dan Williams
2024-03-23 18:01     ` Markus Elfring
2024-03-22  9:06 ` Peter Zijlstra
2024-03-22 19:10   ` Dan Williams
2024-03-23 20:44     ` Matthew Wilcox
2024-03-24  0:57       ` Dan Williams
2024-03-24  6:23         ` Lukas Wunner
2024-03-24  9:08         ` Jonathan Corbet
2024-03-24 20:37           ` Dan Williams
2024-03-22 13:00 ` Markus Elfring [this message]
2024-03-22 13:48   ` Greg Kroah-Hartman
2024-03-22 13:34 ` Bjorn Helgaas
2024-03-25 18:52   ` Dan Williams
2024-03-22 13:45 ` Matthew Wilcox
2024-03-25 22:57 ` [PATCH v2] " Dan Williams
2024-03-26 12:06   ` Markus Elfring
2024-03-26 15:35   ` Jonathan Corbet
2024-03-26 16:51     ` Dan Williams
2024-03-26 16:56   ` Jonathan Cameron
2024-03-26 17:49   ` Dan Williams
2024-03-26 17:53   ` Dan Williams
2024-03-29 23:48   ` [PATCH v3] " Dan Williams
2024-03-30 20:23     ` Markus Elfring
2024-04-01  8:19     ` Tian, Kevin
2024-04-02  7:15       ` [v3] " Markus Elfring
2024-08-02 13:58     ` [PATCH v3] " Jonathan Cameron
2024-08-02 15:07       ` Peter Zijlstra
2024-08-06 10:51     ` [tip: locking/core] " tip-bot2 for Dan Williams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8a1adff2-eb83-4dec-b8d0-1e523245de65@web.de \
    --to=markus.elfring@web.de \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Julia.Lawall@inria.fr \
    --cc=bhelgaas@google.com \
    --cc=corbet@lwn.net \
    --cc=dan.j.williams@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=ira.weiny@intel.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lukas.wunner@intel.com \
    --cc=peterz@infradead.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox