Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-20146

memory allocation failures in osd_oxc_add()

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • Lustre 2.18.0
    • Lustre 2.17.0
    • None
    • 3
    • 9223372036854775807

    Description

      __mdt_stripe_get()->mdt_big_xattr_get()...->osd_xattr_get->osd_oxc_add() was seen failing order 4 page allocations, possibly when used with widely striped or overstriped files, which should have large striping xattrs:

      mdt03_019: page allocation failure: order:4, mode:0x40d40(GFP_NOFS|__GFP_COMP|__GFP_ZERO), nodemask=(null),cpuset=/,mems_allowed=1
      ...
       Call Trace:
        <TASK>
        dump_stack_lvl+0x34/0x48
        warn_alloc+0x129/0x150
        ? __alloc_pages_direct_compact+0x1f1/0x210
        __alloc_pages_slowpath.constprop.0+0xa73/0xb20
        ? get_page_from_freelist+0x2aa/0x590
        ? list_lru_add_obj+0x84/0xa0
        __alloc_pages+0x21d/0x250
        __kmalloc_large_node+0x79/0x110
        __kmalloc+0x452/0x510
        ? osd_oxc_add+0x3f/0x2d0 [osd_ldiskfs]
        ? osd_oxc_add+0x3f/0x2d0 [osd_ldiskfs]
        osd_oxc_add+0x3f/0x2d0 [osd_ldiskfs]
        osd_xattr_get+0x186/0x470 [osd_ldiskfs]
        lod_xattr_get+0xde/0x970 [lod]
        ? osd_xattr_get+0x27f/0x470 [osd_ldiskfs]
        mdd_xattr_get+0x82/0x530 [mdd]
        ? lod_xattr_get+0xf7/0x970 [lod]
        mdt_big_xattr_get+0x3b4/0x950 [mdt]
        ? mdd_xattr_get+0x90/0x530 [mdd]
        __mdt_stripe_get+0x1e3/0x5b0 [mdt]
        mdt_attr_get_complex+0x2a6/0x950 [mdt]
        mdt_reint_open+0x170c/0x25e0 [mdt]
        mdt_reint_rec+0x119/0x270 [mdt]
        mdt_reint_internal+0x4ea/0x9b0 [mdt]
        mdt_intent_open+0x13c/0x430 [mdt]
        ? __pfx_mdt_intent_open+0x10/0x10 [mdt]
        mdt_intent_opc.constprop.0+0xe5/0x5d0 [mdt]
        mdt_intent_policy+0xff/0x480 [mdt]
        ldlm_lock_enqueue+0x3be/0x870 [ptlrpc]
        ? cfs_hash_bd_add_locked+0x1c/0x90 [libcfs]
        ldlm_handle_enqueue+0x32d/0x1600 [ptlrpc]
        tgt_enqueue+0x60/0x240 [ptlrpc]
        tgt_handle_request0+0x147/0x770 [ptlrpc]
        tgt_request_handle+0x1eb/0xb80 [ptlrpc]
        ? obd_export_timed_fini+0xc0/0xe0 [obdclass]
        ptlrpc_server_handle_request.isra.0+0x29d/0xce0 [ptlrpc]
        ptlrpc_main+0xa7b/0xfa0 [ptlrpc]
      

      We could use OBD_ALLOC_LARGE() in osd_oxc_add(), to avoid failures in such cases.

      Attachments

        Activity

          People

            nangelinas Nikitas Angelinas
            nangelinas Nikitas Angelinas
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: