On 9/30/20 3:06 PM, Eric Farman wrote: > > > On 9/30/20 7:37 AM, Vlastimil Babka wrote: >> On 9/30/20 1:26 PM, Eric Farman wrote: >>> The routine that applies debug flags to the kmem_cache slabs >>> inadvertantly prevents non-debug flags from being applied to >>> those same objects. That is, if slub_debug=<flag>,<slab> is >>> specified, non-debugged slabs will end up having flags of zero, >>> and the slabs will be unusable. Fix this by returning the input >>> flags for non-matching slabs as was done previously. >> >> Thanks a lot for debugging this and sorry for the trouble! > > You're welcome. Just glad I wasn't losing my mind! > >> >>> Fixes: e17f1dfba37b ("mm, slub: extend slub_debug syntax for multiple blocks") >>> Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxx> >> >> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> >> >> But with a small adjustment below: >> >>> --- >>> mm/slub.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/mm/slub.c b/mm/slub.c >>> index d4177aecedf6..3d7c95fd6a08 100644 >>> --- a/mm/slub.c >>> +++ b/mm/slub.c >>> @@ -1450,7 +1450,7 @@ slab_flags_t kmem_cache_flags(unsigned int object_size, >>> } >>> } >>> >>> - return slub_debug; >>> + return flags; >> >> To keep supporting the case of "debug flags set for all caches, with exceptions >> for listed caches", i.e. "slub_debug=FZ;-,zs_handle,zspage", we should return >> here this: >> >> return flags | slub_debug; > > Ah, cool... I wondered about that, but didn't go far enough down the > combinations. Does it then make sense to strip out the "if > (!slub_debug_string)" check at the beginning of the function? As in: Yeah, that makes sense. Thanks!