On 19.08.24 12:19, Michal Hocko wrote:
On Mon 19-08-24 11:44:39, David Hildenbrand wrote:
[...]
        if (gfp_mask & __GFP_NOFAIL) {
                /*
-                * All existing users of the __GFP_NOFAIL are blockable, so warn
-                * of any new users that actually require GFP_NOWAIT
+                * All existing users of the __GFP_NOFAIL are blockable
+                * otherwise we introduce a busy loop with inside the page
+                * allocator from non-sleepable contexts
                 */
-               if (WARN_ON_ONCE_GFP(!can_direct_reclaim, gfp_mask))
-                       goto fail;
+               BUG_ON(!can_direct_reclaim);

No new BUG_ON(), WARN_ON_ONCE() is good enough for something that should be
found during ordinary testing.

Do you mean
        if (WARN_ON_ONCE_GFP(...))
                goto retry?

Not really ...

but now I read the description more carefully and I am not sure why we are so into throwing around BUG_ONs here, for something that is simply not allowed and doesn't make sense.

If __GFP_NOFAIL is documented to

"
+ * It _must_ be blockable and used together with __GFP_DIRECT_RECLAIM.
+ * It should _never_ be used in non-sleepable contexts.
"

Why not document

"__GFP_NOFAIL always implies __GFP_DIRECT_RECLAIM" and do exactly that?

--
Cheers,

David / dhildenb


Reply via email to