From: Michal Hocko <mhocko@suse.com>
To: Kent Overstreet <kent.overstreet@linux.dev>
Cc: linux-mm@kvack.org, Vlastimil Babka <vbabka@suse.cz>,
Matthew Wilcox <willy@infradead.org>,
"Darrick J . Wong" <djwong@kernel.org>
Subject: Re: [PATCH 2/2] mm: introduce PF_MEMALLOC_NOWARN
Date: Mon, 29 Jan 2024 11:48:00 +0100 [thread overview]
Message-ID: <ZbeCYB1z1s78I8ql@tiehlicka> (raw)
In-Reply-To: <jc7n2mzifvthvav4rryg6liywmk3gqbt5lgggdur2tb3a5yrn7@ebllquxuhnyt>
On Sun 28-01-24 14:43:16, Kent Overstreet wrote:
> On Sun, Jan 28, 2024 at 04:45:32PM +0100, Michal Hocko wrote:
> > On Fri 26-01-24 17:07:56, Kent Overstreet wrote:
> > > If we're using PF_MEMALLOC, we might have a fallback and might not to
> > > warn about a failing allocation - thus we need a PF_* equivalent of
> > > __GFP_NOWARN.
> >
> > Could you be more specific about the user? Is this an allocation from
> > the reclaim path or an explicit PF_MEMALLOC one? It would be also really
> > helpful to explain why GFP_NOWARN cannot be used directly.
>
> Explicit PF_MEMALLOC.
>
> It's for a call to alloc_inode(), which doesn't take gfp flags, and
> plumbing it would require modifying a s_ops callback and would touch
> every filesystem -
OK, I see. This should be part of the changelog.
> but we want to get away from gfp flags anyways :)
>
> More specifically, the code where I'm using it is doing a "try
> GFP_NOWAIT first; if that fails drop locks and do GFP_KERNEL" dance;
> it's part of a cleanup for some weird lifetime stuff related to
> fs/inode.c.
>
> #define memalloc_flags_do(_flags, _do) \
> ({ \
> unsigned _saved_flags = memalloc_flags_save(_flags); \
> typeof(_do) _ret = _do; \
> memalloc_noreclaim_restore(_saved_flags); \
> _ret; \
> })
>
> /*
> * Allocate a new inode, dropping/retaking btree locks if necessary:
> */
> static struct bch_inode_info *bch2_new_inode(struct btree_trans *trans)
> {
> struct bch_fs *c = trans->c;
>
> struct bch_inode_info *inode =
> memalloc_flags_do(PF_MEMALLOC|PF_MEMALLOC_NOWARN, to_bch_ei(new_inode(c->vfs_sb)));
Is this what you meant by GFP_NOWAIT allocation? You would be right
about this allocation not entering the direct reclaim but do you realize
this is not an ordinary NOWAIT request beause PF_MEMALLOC will allow to
dip into memory reserves without any limits? (Unless the specific
allocation down the road is explicitly GFP_NOMEMALLOC)
A failure here means that the system is really in a desparate state with all
the memory reserves gone which migt break reclaimers who rely on those
reserves.
Are you sure it is a good idea? Unless I am missing something you are
just giving an ordinary user access to those reserves by creating inodes
without any bounds.
--
Michal Hocko
SUSE Labs
next prev parent reply other threads:[~2024-01-29 10:48 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-26 22:07 [PATCH 1/2] mm: introduce memalloc_flags_{save,restore} Kent Overstreet
2024-01-26 22:07 ` [PATCH 2/2] mm: introduce PF_MEMALLOC_NOWARN Kent Overstreet
2024-01-28 15:45 ` Michal Hocko
2024-01-28 19:43 ` Kent Overstreet
2024-01-29 10:48 ` Michal Hocko [this message]
2024-02-01 11:03 ` Kent Overstreet
2024-02-01 15:59 ` Michal Hocko
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=ZbeCYB1z1s78I8ql@tiehlicka \
--to=mhocko@suse.com \
--cc=djwong@kernel.org \
--cc=kent.overstreet@linux.dev \
--cc=linux-mm@kvack.org \
--cc=vbabka@suse.cz \
--cc=willy@infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.