* [PATCH v2 0/2] btrfs: cleanup on the extra_gfp parameters
@ 2024-06-28 4:21 Qu Wenruo
2024-06-28 4:21 ` [PATCH v2 1/2] btrfs: remove the extra_gfp parameter from btrfs_alloc_folio_array() Qu Wenruo
2024-06-28 4:21 ` [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array() Qu Wenruo
0 siblings, 2 replies; 5+ messages in thread
From: Qu Wenruo @ 2024-06-28 4:21 UTC (permalink / raw)
To: linux-btrfs
[CHANGELOG]
v2:
- Instead of a one line wrapper, just rename @extra_gfp to @nofail
The @extra_gfp parameters for page/folio array allocation is only for
extent buffer allocation to pass __GFP_NOFAIL.
Furthermore there is no usage of btrfs_alloc_folio_array() for the extra
gfp flags.
This patchset removes the parameter for btrfs_alloc_folio_array() first,
then rename @extra_gfp to @nofail for btrfs_alloc_page_array().
Qu Wenruo (2):
btrfs: remove the extra_gfp parameter from btrfs_alloc_folio_array()
btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array()
fs/btrfs/compression.c | 2 +-
fs/btrfs/extent_io.c | 28 +++++++++++++---------------
fs/btrfs/extent_io.h | 5 ++---
fs/btrfs/inode.c | 2 +-
fs/btrfs/raid56.c | 6 +++---
fs/btrfs/scrub.c | 2 +-
6 files changed, 21 insertions(+), 24 deletions(-)
--
2.45.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] btrfs: remove the extra_gfp parameter from btrfs_alloc_folio_array()
2024-06-28 4:21 [PATCH v2 0/2] btrfs: cleanup on the extra_gfp parameters Qu Wenruo
@ 2024-06-28 4:21 ` Qu Wenruo
2024-06-28 4:21 ` [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array() Qu Wenruo
1 sibling, 0 replies; 5+ messages in thread
From: Qu Wenruo @ 2024-06-28 4:21 UTC (permalink / raw)
To: linux-btrfs; +Cc: Filipe Manana
The function btrfs_alloc_folio_array() is only utilized in
btrfs_submit_compressed_read() and no other location, and the only
caller is not utilizing the @extra_gfp parameter.
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/compression.c | 2 +-
fs/btrfs/extent_io.c | 8 +++-----
fs/btrfs/extent_io.h | 3 +--
3 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 85eb2cadbbf6..a149f3659b15 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -609,7 +609,7 @@ void btrfs_submit_compressed_read(struct btrfs_bio *bbio)
goto out_free_bio;
}
- ret2 = btrfs_alloc_folio_array(cb->nr_folios, cb->compressed_folios, 0);
+ ret2 = btrfs_alloc_folio_array(cb->nr_folios, cb->compressed_folios);
if (ret2) {
ret = BLK_STS_RESOURCE;
goto out_free_compressed_pages;
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index c7a9284e45e1..dc416bad9ad8 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -667,24 +667,22 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
}
/*
- * Populate every free slot in a provided array with folios.
+ * Populate every free slot in a provided array with folios using GFP_NOFS.
*
* @nr_folios: number of folios to allocate
* @folio_array: the array to fill with folios; any existing non-NULL entries in
* the array will be skipped
- * @extra_gfp: the extra GFP flags for the allocation
*
* Return: 0 if all folios were able to be allocated;
* -ENOMEM otherwise, the partially allocated folios would be freed and
* the array slots zeroed
*/
-int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array,
- gfp_t extra_gfp)
+int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array)
{
for (int i = 0; i < nr_folios; i++) {
if (folio_array[i])
continue;
- folio_array[i] = folio_alloc(GFP_NOFS | extra_gfp, 0);
+ folio_array[i] = folio_alloc(GFP_NOFS, 0);
if (!folio_array[i])
goto error;
}
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 8b33cfea6b75..8364dcb1ace3 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -365,8 +365,7 @@ void btrfs_clear_buffer_dirty(struct btrfs_trans_handle *trans,
int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
gfp_t extra_gfp);
-int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array,
- gfp_t extra_gfp);
+int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array);
#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
bool find_lock_delalloc_range(struct inode *inode,
--
2.45.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array()
2024-06-28 4:21 [PATCH v2 0/2] btrfs: cleanup on the extra_gfp parameters Qu Wenruo
2024-06-28 4:21 ` [PATCH v2 1/2] btrfs: remove the extra_gfp parameter from btrfs_alloc_folio_array() Qu Wenruo
@ 2024-06-28 4:21 ` Qu Wenruo
2024-06-28 9:33 ` Filipe Manana
1 sibling, 1 reply; 5+ messages in thread
From: Qu Wenruo @ 2024-06-28 4:21 UTC (permalink / raw)
To: linux-btrfs
There is only one caller utilizing the @extra_gfp parameter,
alloc_eb_folio_array().
And in that case the extra_gfp is only assigned to __GFP_NOFAIL.
This patch would rename the @extra_gfp parameter to @nofail to indicate
that.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/extent_io.c | 20 ++++++++++----------
fs/btrfs/extent_io.h | 2 +-
fs/btrfs/inode.c | 2 +-
fs/btrfs/raid56.c | 6 +++---
fs/btrfs/scrub.c | 2 +-
5 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index dc416bad9ad8..d3ce07ab9692 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -696,21 +696,21 @@ int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array)
}
/*
- * Populate every free slot in a provided array with pages.
+ * Populate every free slot in a provided array with pages, using GFP_NOFS.
*
* @nr_pages: number of pages to allocate
* @page_array: the array to fill with pages; any existing non-null entries in
- * the array will be skipped
- * @extra_gfp: the extra GFP flags for the allocation.
+ * the array will be skipped
+ * @nofail: whether using __GFP_NOFAIL flag
*
* Return: 0 if all pages were able to be allocated;
* -ENOMEM otherwise, the partially allocated pages would be freed and
* the array slots zeroed
*/
int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
- gfp_t extra_gfp)
+ bool nofail)
{
- const gfp_t gfp = GFP_NOFS | extra_gfp;
+ const gfp_t gfp = nofail ? (GFP_NOFS | __GFP_NOFAIL) : GFP_NOFS;
unsigned int allocated;
for (allocated = 0; allocated < nr_pages;) {
@@ -734,13 +734,13 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
*
* For now, the folios populated are always in order 0 (aka, single page).
*/
-static int alloc_eb_folio_array(struct extent_buffer *eb, gfp_t extra_gfp)
+static int alloc_eb_folio_array(struct extent_buffer *eb, bool nofail)
{
struct page *page_array[INLINE_EXTENT_BUFFER_PAGES] = { 0 };
int num_pages = num_extent_pages(eb);
int ret;
- ret = btrfs_alloc_page_array(num_pages, page_array, extra_gfp);
+ ret = btrfs_alloc_page_array(num_pages, page_array, nofail);
if (ret < 0)
return ret;
@@ -2722,7 +2722,7 @@ struct extent_buffer *btrfs_clone_extent_buffer(const struct extent_buffer *src)
*/
set_bit(EXTENT_BUFFER_UNMAPPED, &new->bflags);
- ret = alloc_eb_folio_array(new, 0);
+ ret = alloc_eb_folio_array(new, false);
if (ret) {
btrfs_release_extent_buffer(new);
return NULL;
@@ -2755,7 +2755,7 @@ struct extent_buffer *__alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
if (!eb)
return NULL;
- ret = alloc_eb_folio_array(eb, 0);
+ ret = alloc_eb_folio_array(eb, false);
if (ret)
goto err;
@@ -3121,7 +3121,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
reallocate:
/* Allocate all pages first. */
- ret = alloc_eb_folio_array(eb, __GFP_NOFAIL);
+ ret = alloc_eb_folio_array(eb, true);
if (ret < 0) {
btrfs_free_subpage(prealloc);
goto out;
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 8364dcb1ace3..e0cf9a367373 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -364,7 +364,7 @@ void btrfs_clear_buffer_dirty(struct btrfs_trans_handle *trans,
struct extent_buffer *buf);
int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
- gfp_t extra_gfp);
+ bool nofail);
int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array);
#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 92ef9b01cf5e..0a11d309ee89 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -9128,7 +9128,7 @@ static ssize_t btrfs_encoded_read_regular(struct kiocb *iocb,
pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
if (!pages)
return -ENOMEM;
- ret = btrfs_alloc_page_array(nr_pages, pages, 0);
+ ret = btrfs_alloc_page_array(nr_pages, pages, false);
if (ret) {
ret = -ENOMEM;
goto out;
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
index 3858c00936e8..39bec672df0c 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -1051,7 +1051,7 @@ static int alloc_rbio_pages(struct btrfs_raid_bio *rbio)
{
int ret;
- ret = btrfs_alloc_page_array(rbio->nr_pages, rbio->stripe_pages, 0);
+ ret = btrfs_alloc_page_array(rbio->nr_pages, rbio->stripe_pages, false);
if (ret < 0)
return ret;
/* Mapping all sectors */
@@ -1066,7 +1066,7 @@ static int alloc_rbio_parity_pages(struct btrfs_raid_bio *rbio)
int ret;
ret = btrfs_alloc_page_array(rbio->nr_pages - data_pages,
- rbio->stripe_pages + data_pages, 0);
+ rbio->stripe_pages + data_pages, false);
if (ret < 0)
return ret;
@@ -1640,7 +1640,7 @@ static int alloc_rbio_data_pages(struct btrfs_raid_bio *rbio)
const int data_pages = rbio->nr_data * rbio->stripe_npages;
int ret;
- ret = btrfs_alloc_page_array(data_pages, rbio->stripe_pages, 0);
+ ret = btrfs_alloc_page_array(data_pages, rbio->stripe_pages, false);
if (ret < 0)
return ret;
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 4677a4f55b6a..14a8d7100018 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -261,7 +261,7 @@ static int init_scrub_stripe(struct btrfs_fs_info *fs_info,
atomic_set(&stripe->pending_io, 0);
spin_lock_init(&stripe->write_error_lock);
- ret = btrfs_alloc_page_array(SCRUB_STRIPE_PAGES, stripe->pages, 0);
+ ret = btrfs_alloc_page_array(SCRUB_STRIPE_PAGES, stripe->pages, false);
if (ret < 0)
goto error;
--
2.45.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array()
2024-06-28 4:21 ` [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array() Qu Wenruo
@ 2024-06-28 9:33 ` Filipe Manana
2024-07-01 14:03 ` David Sterba
0 siblings, 1 reply; 5+ messages in thread
From: Filipe Manana @ 2024-06-28 9:33 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Fri, Jun 28, 2024 at 5:22 AM Qu Wenruo <wqu@suse.com> wrote:
>
> There is only one caller utilizing the @extra_gfp parameter,
> alloc_eb_folio_array().
> And in that case the extra_gfp is only assigned to __GFP_NOFAIL.
>
> This patch would rename the @extra_gfp parameter to @nofail to indicate
> that.
"would rename" -> renames
Anyway, it's good now:
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Thanks.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> fs/btrfs/extent_io.c | 20 ++++++++++----------
> fs/btrfs/extent_io.h | 2 +-
> fs/btrfs/inode.c | 2 +-
> fs/btrfs/raid56.c | 6 +++---
> fs/btrfs/scrub.c | 2 +-
> 5 files changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
> index dc416bad9ad8..d3ce07ab9692 100644
> --- a/fs/btrfs/extent_io.c
> +++ b/fs/btrfs/extent_io.c
> @@ -696,21 +696,21 @@ int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array)
> }
>
> /*
> - * Populate every free slot in a provided array with pages.
> + * Populate every free slot in a provided array with pages, using GFP_NOFS.
> *
> * @nr_pages: number of pages to allocate
> * @page_array: the array to fill with pages; any existing non-null entries in
> - * the array will be skipped
> - * @extra_gfp: the extra GFP flags for the allocation.
> + * the array will be skipped
> + * @nofail: whether using __GFP_NOFAIL flag
> *
> * Return: 0 if all pages were able to be allocated;
> * -ENOMEM otherwise, the partially allocated pages would be freed and
> * the array slots zeroed
> */
> int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
> - gfp_t extra_gfp)
> + bool nofail)
> {
> - const gfp_t gfp = GFP_NOFS | extra_gfp;
> + const gfp_t gfp = nofail ? (GFP_NOFS | __GFP_NOFAIL) : GFP_NOFS;
> unsigned int allocated;
>
> for (allocated = 0; allocated < nr_pages;) {
> @@ -734,13 +734,13 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
> *
> * For now, the folios populated are always in order 0 (aka, single page).
> */
> -static int alloc_eb_folio_array(struct extent_buffer *eb, gfp_t extra_gfp)
> +static int alloc_eb_folio_array(struct extent_buffer *eb, bool nofail)
> {
> struct page *page_array[INLINE_EXTENT_BUFFER_PAGES] = { 0 };
> int num_pages = num_extent_pages(eb);
> int ret;
>
> - ret = btrfs_alloc_page_array(num_pages, page_array, extra_gfp);
> + ret = btrfs_alloc_page_array(num_pages, page_array, nofail);
> if (ret < 0)
> return ret;
>
> @@ -2722,7 +2722,7 @@ struct extent_buffer *btrfs_clone_extent_buffer(const struct extent_buffer *src)
> */
> set_bit(EXTENT_BUFFER_UNMAPPED, &new->bflags);
>
> - ret = alloc_eb_folio_array(new, 0);
> + ret = alloc_eb_folio_array(new, false);
> if (ret) {
> btrfs_release_extent_buffer(new);
> return NULL;
> @@ -2755,7 +2755,7 @@ struct extent_buffer *__alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
> if (!eb)
> return NULL;
>
> - ret = alloc_eb_folio_array(eb, 0);
> + ret = alloc_eb_folio_array(eb, false);
> if (ret)
> goto err;
>
> @@ -3121,7 +3121,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
>
> reallocate:
> /* Allocate all pages first. */
> - ret = alloc_eb_folio_array(eb, __GFP_NOFAIL);
> + ret = alloc_eb_folio_array(eb, true);
> if (ret < 0) {
> btrfs_free_subpage(prealloc);
> goto out;
> diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
> index 8364dcb1ace3..e0cf9a367373 100644
> --- a/fs/btrfs/extent_io.h
> +++ b/fs/btrfs/extent_io.h
> @@ -364,7 +364,7 @@ void btrfs_clear_buffer_dirty(struct btrfs_trans_handle *trans,
> struct extent_buffer *buf);
>
> int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
> - gfp_t extra_gfp);
> + bool nofail);
> int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array);
>
> #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 92ef9b01cf5e..0a11d309ee89 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -9128,7 +9128,7 @@ static ssize_t btrfs_encoded_read_regular(struct kiocb *iocb,
> pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
> if (!pages)
> return -ENOMEM;
> - ret = btrfs_alloc_page_array(nr_pages, pages, 0);
> + ret = btrfs_alloc_page_array(nr_pages, pages, false);
> if (ret) {
> ret = -ENOMEM;
> goto out;
> diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
> index 3858c00936e8..39bec672df0c 100644
> --- a/fs/btrfs/raid56.c
> +++ b/fs/btrfs/raid56.c
> @@ -1051,7 +1051,7 @@ static int alloc_rbio_pages(struct btrfs_raid_bio *rbio)
> {
> int ret;
>
> - ret = btrfs_alloc_page_array(rbio->nr_pages, rbio->stripe_pages, 0);
> + ret = btrfs_alloc_page_array(rbio->nr_pages, rbio->stripe_pages, false);
> if (ret < 0)
> return ret;
> /* Mapping all sectors */
> @@ -1066,7 +1066,7 @@ static int alloc_rbio_parity_pages(struct btrfs_raid_bio *rbio)
> int ret;
>
> ret = btrfs_alloc_page_array(rbio->nr_pages - data_pages,
> - rbio->stripe_pages + data_pages, 0);
> + rbio->stripe_pages + data_pages, false);
> if (ret < 0)
> return ret;
>
> @@ -1640,7 +1640,7 @@ static int alloc_rbio_data_pages(struct btrfs_raid_bio *rbio)
> const int data_pages = rbio->nr_data * rbio->stripe_npages;
> int ret;
>
> - ret = btrfs_alloc_page_array(data_pages, rbio->stripe_pages, 0);
> + ret = btrfs_alloc_page_array(data_pages, rbio->stripe_pages, false);
> if (ret < 0)
> return ret;
>
> diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
> index 4677a4f55b6a..14a8d7100018 100644
> --- a/fs/btrfs/scrub.c
> +++ b/fs/btrfs/scrub.c
> @@ -261,7 +261,7 @@ static int init_scrub_stripe(struct btrfs_fs_info *fs_info,
> atomic_set(&stripe->pending_io, 0);
> spin_lock_init(&stripe->write_error_lock);
>
> - ret = btrfs_alloc_page_array(SCRUB_STRIPE_PAGES, stripe->pages, 0);
> + ret = btrfs_alloc_page_array(SCRUB_STRIPE_PAGES, stripe->pages, false);
> if (ret < 0)
> goto error;
>
> --
> 2.45.2
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array()
2024-06-28 9:33 ` Filipe Manana
@ 2024-07-01 14:03 ` David Sterba
0 siblings, 0 replies; 5+ messages in thread
From: David Sterba @ 2024-07-01 14:03 UTC (permalink / raw)
To: Filipe Manana; +Cc: Qu Wenruo, linux-btrfs
On Fri, Jun 28, 2024 at 10:33:19AM +0100, Filipe Manana wrote:
> On Fri, Jun 28, 2024 at 5:22 AM Qu Wenruo <wqu@suse.com> wrote:
> >
> > There is only one caller utilizing the @extra_gfp parameter,
> > alloc_eb_folio_array().
> > And in that case the extra_gfp is only assigned to __GFP_NOFAIL.
> >
> > This patch would rename the @extra_gfp parameter to @nofail to indicate
> > that.
>
> "would rename" -> renames
Ideally also leave out the whole 'This patch ...', I've been fixing that
when I notice it but I've just found more in now immutable patches so
it's obviously not perfect.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-07-01 14:03 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-28 4:21 [PATCH v2 0/2] btrfs: cleanup on the extra_gfp parameters Qu Wenruo
2024-06-28 4:21 ` [PATCH v2 1/2] btrfs: remove the extra_gfp parameter from btrfs_alloc_folio_array() Qu Wenruo
2024-06-28 4:21 ` [PATCH v2 2/2] btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array() Qu Wenruo
2024-06-28 9:33 ` Filipe Manana
2024-07-01 14:03 ` David Sterba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox