Hi Waiman, Thank you for the patch! Yet something to improve: [auto build test ERROR on tip/locking/core] [also build test ERROR on tip/auto-latest linus/master v5.6-rc1 next-20200213] [cannot apply to arm-perf/for-next/perf] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Waiman-Long/locking-mutex-Add-mutex_timed_lock-to-solve-potential-deadlock-problems/20200213-063401 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 41f0e29190ac9e38099a37abd1a8a4cb1dc21233 config: x86_64-randconfig-s2-20200213 (attached as .config) compiler: gcc-6 (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@xxxxxxxxx> All errors (new ones prefixed by >>): mm/slub.c: In function 'slab_attr_store': >> mm/slub.c:5542:7: error: implicit declaration of function 'mutex_timed_lock' [-Werror=implicit-function-declaration] if (mutex_timed_lock(&slab_mutex, 100) < 0) ^~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/mutex_timed_lock +5542 mm/slub.c 5519 5520 static ssize_t slab_attr_store(struct kobject *kobj, 5521 struct attribute *attr, 5522 const char *buf, size_t len) 5523 { 5524 struct slab_attribute *attribute; 5525 struct kmem_cache *s; 5526 int err; 5527 5528 attribute = to_slab_attr(attr); 5529 s = to_slab(kobj); 5530 5531 if (!attribute->store) 5532 return -EIO; 5533 5534 err = attribute->store(s, buf, len); 5535 #ifdef CONFIG_MEMCG 5536 if (slab_state >= FULL && err >= 0 && is_root_cache(s)) { 5537 struct kmem_cache *c; 5538 5539 /* 5540 * Timeout after 100ms 5541 */ > 5542 if (mutex_timed_lock(&slab_mutex, 100) < 0) 5543 return -EBUSY; 5544 5545 if (s->max_attr_size < len) 5546 s->max_attr_size = len; 5547 5548 /* 5549 * This is a best effort propagation, so this function's return 5550 * value will be determined by the parent cache only. This is 5551 * basically because not all attributes will have a well 5552 * defined semantics for rollbacks - most of the actions will 5553 * have permanent effects. 5554 * 5555 * Returning the error value of any of the children that fail 5556 * is not 100 % defined, in the sense that users seeing the 5557 * error code won't be able to know anything about the state of 5558 * the cache. 5559 * 5560 * Only returning the error code for the parent cache at least 5561 * has well defined semantics. The cache being written to 5562 * directly either failed or succeeded, in which case we loop 5563 * through the descendants with best-effort propagation. 5564 */ 5565 for_each_memcg_cache(c, s) 5566 attribute->store(c, buf, len); 5567 mutex_unlock(&slab_mutex); 5568 } 5569 #endif 5570 return err; 5571 } 5572 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip