[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251004210340.193748-1-mssola@mssola.com>
Date: Sat, 4 Oct 2025 23:03:40 +0200
From: Miquel Sabaté Solà <mssola@...ola.com>
To: linux-fsdevel@...r.kernel.org
Cc: viro@...iv.linux.org.uk,
brauner@...nel.org,
linux-kernel@...r.kernel.org,
jack@...e.cz,
Miquel Sabaté Solà <mssola@...ola.com>
Subject: [PATCH] fs: Use a cleanup attribute in copy_fdtable()
This is a small cleanup in which by using the __free(kfree) cleanup
attribute we can avoid three labels to go to, and the code turns to be
more concise and easier to follow.
Signed-off-by: Miquel Sabaté Solà <mssola@...ola.com>
---
fs/file.c | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/fs/file.c b/fs/file.c
index 28743b742e3c..32b937a04003 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -161,7 +161,7 @@ static void copy_fdtable(struct fdtable *nfdt, struct fdtable *ofdt)
*/
static struct fdtable *alloc_fdtable(unsigned int slots_wanted)
{
- struct fdtable *fdt;
+ struct fdtable *fdt __free(kfree) = NULL;
unsigned int nr;
void *data;
@@ -214,18 +214,20 @@ static struct fdtable *alloc_fdtable(unsigned int slots_wanted)
fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL_ACCOUNT);
if (!fdt)
- goto out;
+ return ERR_PTR(-ENOMEM);
fdt->max_fds = nr;
data = kvmalloc_array(nr, sizeof(struct file *), GFP_KERNEL_ACCOUNT);
if (!data)
- goto out_fdt;
+ return ERR_PTR(-ENOMEM);
fdt->fd = data;
data = kvmalloc(max_t(size_t,
2 * nr / BITS_PER_BYTE + BITBIT_SIZE(nr), L1_CACHE_BYTES),
GFP_KERNEL_ACCOUNT);
- if (!data)
- goto out_arr;
+ if (!data) {
+ kvfree(fdt->fd);
+ return ERR_PTR(-ENOMEM);
+ }
fdt->open_fds = data;
data += nr / BITS_PER_BYTE;
fdt->close_on_exec = data;
@@ -233,13 +235,6 @@ static struct fdtable *alloc_fdtable(unsigned int slots_wanted)
fdt->full_fds_bits = data;
return fdt;
-
-out_arr:
- kvfree(fdt->fd);
-out_fdt:
- kfree(fdt);
-out:
- return ERR_PTR(-ENOMEM);
}
/*
--
2.51.0
Powered by blists - more mailing lists