Re: XFS: possible memory allocation deadlock in kmem_alloc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/5/19 2:36 PM, Blake Golliher wrote:
> We don't get anything more then this messages.
> 
> [Tue Nov  5 11:18:34 2019] XFS: nginx(2540) possible memory allocation deadlock size 63960 in kmem_alloc (mode:0x250)
> 
> [Tue Nov  5 11:18:34 2019] XFS: nginx(2517) possible memory allocation deadlock size 56880 in kmem_alloc (mode:0x250)
> 
> [Tue Nov  5 11:18:34 2019] XFS: nginx(2540) possible memory allocation deadlock size 63960 in kmem_alloc (mode:0x250)
> 
> [Tue Nov  5 11:18:35 2019] XFS: nginx(2517) possible memory allocation deadlock size 56880 in kmem_alloc (mode:0x250)
> 
> [Tue Nov  5 11:18:36 2019] XFS: nginx(2514) possible memory allocation deadlock size 63960 in kmem_alloc (mode:0x250)
> 
> [Tue Nov  5 11:18:36 2019] XFS: nginx(2540) possible memory allocation deadlock size 63960 in kmem_alloc (mode:0x250)
> 
> [Tue Nov  5 11:18:37 2019] XFS: nginx(2517) possible memory allocation deadlock size 56880 in kmem_alloc (mode:0x250)

no sure what to say.  In that kernel, when we print the message:

                        xfs_err(NULL,
        "%s(%u) possible memory allocation deadlock size %u in %s (mode:0x%x)",
                                current->comm, current->pid,
                                (unsigned int)size, __func__, lflags);

xfs_err() is:

define_xfs_printk_level(xfs_err, KERN_ERR);

which is the macro:

#define define_xfs_printk_level(func, kern_level)               \
void func(const struct xfs_mount *mp, const char *fmt, ...)     \
{                                                               \
        struct va_format        vaf;                            \
        va_list                 args;                           \
        int                     level;                          \
                                                                \
        va_start(args, fmt);                                    \
                                                                \
        vaf.fmt = fmt;                                          \
        vaf.va = &args;                                         \
                                                                \
        __xfs_printk(kern_level, mp, &vaf);                     \
        va_end(args);                                           \
                                                                \
        if (!kstrtoint(kern_level, 0, &level) &&                \ 
            level <= 3 /* LOGLEVEL_ERR */ &&                    \
            xfs_error_level >= XFS_ERRLEVEL_HIGH)               \
                xfs_stack_trace();                              \
}                                                               \

which should dump a stack if called w/ ERR priority and the xfs_error_level is at 11.

I suppose your general kernel ring buffer needs to be turned up high enough
as well (i.e. dmesg -n 8 to be sure?)

The resulting stack trace would tell us exactly how you got to the 
allocation message.

-Eric



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux