Details
-
Bug
-
Resolution: Fixed
-
Minor
-
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.