From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753031AbdLWP3O (ORCPT ); Sat, 23 Dec 2017 10:29:14 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:36526 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751775AbdLWP3L (ORCPT ); Sat, 23 Dec 2017 10:29:11 -0500 X-Google-Smtp-Source: ACJfBov1cnzEwEowI5aWa8/JKS1/R+zLMwd+4DckSRXc9PuNSYQY7NRA/iNVeCy+pm6ABKUENmPi7Q== From: Pravin Shedge To: dave@stgolabs.net, akpm@linux-foundation.org, linux-kernel@vger.kernel.org Cc: pravin.shedge4linux@gmail.com Subject: [PATCH 2/2] lib: Remove module auto-unloading which encourages inconsistent behaviour Date: Sat, 23 Dec 2017 20:58:49 +0530 Message-Id: <1514042929-8120-1-git-send-email-pravin.shedge4linux@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The module auto-unload might seem like a nice optimization, but it encourages inconsistent behaviour. And behaviour that is different from all other normal modules. rbtree_test.c and percpu_test.c returns -EAGAIN from module_init() on successful completion. Normal module return 0 on success but returning -EAGAIN perform auto module unloading which seem like a nice optimization but it brings inconsistent behaviour as well. I face the similar problem in my previous patch, "Paul Gortmaker" gives nice review comment on module auto-unloading brings inconsistent behaviour. Imagine something as simple as this: for i in $LIST ; do modprobe $i lsmod | grep -q $i if [ $? != 0 ]; then echo Module $i is not present! ; fi done OK, not ideal code, ignoring the modprobe return -- but what it reports is true -- rbtree_test.c and percpu_test.c test module (if it passed) will NOT be present. All other modules from linux/lib/* follow the same semantics that module_init() returns 0 on successful completion & let external entity like rmmod do the module unloading task. Signed-off-by: Pravin Shedge --- lib/percpu_test.c | 3 ++- lib/rbtree_test.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/percpu_test.c b/lib/percpu_test.c index 0b5d14d..57a637b 100644 --- a/lib/percpu_test.c +++ b/lib/percpu_test.c @@ -123,7 +123,8 @@ static int __init percpu_test_init(void) preempt_enable(); pr_info("percpu test done\n"); - return -EAGAIN; /* Fail will directly unload the module */ + + return 0; } static void __exit percpu_test_exit(void) diff --git a/lib/rbtree_test.c b/lib/rbtree_test.c index 7d36c1e..5c52112 100644 --- a/lib/rbtree_test.c +++ b/lib/rbtree_test.c @@ -394,7 +394,7 @@ static int __init rbtree_test_init(void) kfree(nodes); - return -EAGAIN; /* Fail will directly unload the module */ + return 0; } static void __exit rbtree_test_exit(void) -- 2.7.4