linux-modules.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] tools: Print a message if refcnt attribute is missing
@ 2019-03-08 20:39 Ezequiel Garcia
  2019-03-08 21:09 ` Lucas De Marchi
  0 siblings, 1 reply; 2+ messages in thread
From: Ezequiel Garcia @ 2019-03-08 20:39 UTC (permalink / raw)
  To: lucas.demarchi, linux-modules; +Cc: Ezequiel Garcia

Currently, check_module_inuse returns a wrong user message
if the kernel is built without module unloading support.

Fix it by returning a more specific error, in case 'refcnt'
attribute is missing.
---
 tools/remove.c | 9 ++++++---
 tools/rmmod.c  | 9 ++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/tools/remove.c b/tools/remove.c
index 07e2cc0c83cd..387ef0ed17ce 100644
--- a/tools/remove.c
+++ b/tools/remove.c
@@ -44,7 +44,7 @@ static void help(void)
 
 static int check_module_inuse(struct kmod_module *mod) {
 	struct kmod_list *holders;
-	int state;
+	int state, ret;
 
 	state = kmod_module_get_initstate(mod);
 
@@ -74,12 +74,15 @@ static int check_module_inuse(struct kmod_module *mod) {
 		return -EBUSY;
 	}
 
-	if (kmod_module_get_refcnt(mod) != 0) {
+	ret = kmod_module_get_refcnt(mod);
+	if (ret > 0) {
 		ERR("Module %s is in use\n", kmod_module_get_name(mod));
 		return -EBUSY;
+	} else if (ret == -ENOENT) {
+		ERR("Module unloading is not supported\n");
 	}
 
-	return 0;
+	return ret;
 }
 
 static int do_remove(int argc, char *argv[])
diff --git a/tools/rmmod.c b/tools/rmmod.c
index bcdea4c57262..3942e7b439bd 100644
--- a/tools/rmmod.c
+++ b/tools/rmmod.c
@@ -63,7 +63,7 @@ static void help(void)
 
 static int check_module_inuse(struct kmod_module *mod) {
 	struct kmod_list *holders;
-	int state;
+	int state, ret;
 
 	state = kmod_module_get_initstate(mod);
 
@@ -93,12 +93,15 @@ static int check_module_inuse(struct kmod_module *mod) {
 		return -EBUSY;
 	}
 
-	if (kmod_module_get_refcnt(mod) != 0) {
+	ret = kmod_module_get_refcnt(mod);
+	if (ret > 0) {
 		ERR("Module %s is in use\n", kmod_module_get_name(mod));
 		return -EBUSY;
+	} else if (ret == -ENOENT) {
+		ERR("Module unloading is not supported\n");
 	}
 
-	return 0;
+	return ret;
 }
 
 static int do_rmmod(int argc, char *argv[])
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] tools: Print a message if refcnt attribute is missing
  2019-03-08 20:39 [PATCH] tools: Print a message if refcnt attribute is missing Ezequiel Garcia
@ 2019-03-08 21:09 ` Lucas De Marchi
  0 siblings, 0 replies; 2+ messages in thread
From: Lucas De Marchi @ 2019-03-08 21:09 UTC (permalink / raw)
  To: Ezequiel Garcia; +Cc: linux-modules

On Fri, Mar 08, 2019 at 05:39:07PM -0300, Ezequiel Garcia wrote:
>Currently, check_module_inuse returns a wrong user message
>if the kernel is built without module unloading support.
>
>Fix it by returning a more specific error, in case 'refcnt'
>attribute is missing.

Applied, thanks.

Lucas De Marchi

>---
> tools/remove.c | 9 ++++++---
> tools/rmmod.c  | 9 ++++++---
> 2 files changed, 12 insertions(+), 6 deletions(-)
>
>diff --git a/tools/remove.c b/tools/remove.c
>index 07e2cc0c83cd..387ef0ed17ce 100644
>--- a/tools/remove.c
>+++ b/tools/remove.c
>@@ -44,7 +44,7 @@ static void help(void)
>
> static int check_module_inuse(struct kmod_module *mod) {
> 	struct kmod_list *holders;
>-	int state;
>+	int state, ret;
>
> 	state = kmod_module_get_initstate(mod);
>
>@@ -74,12 +74,15 @@ static int check_module_inuse(struct kmod_module *mod) {
> 		return -EBUSY;
> 	}
>
>-	if (kmod_module_get_refcnt(mod) != 0) {
>+	ret = kmod_module_get_refcnt(mod);
>+	if (ret > 0) {
> 		ERR("Module %s is in use\n", kmod_module_get_name(mod));
> 		return -EBUSY;
>+	} else if (ret == -ENOENT) {
>+		ERR("Module unloading is not supported\n");
> 	}
>
>-	return 0;
>+	return ret;
> }
>
> static int do_remove(int argc, char *argv[])
>diff --git a/tools/rmmod.c b/tools/rmmod.c
>index bcdea4c57262..3942e7b439bd 100644
>--- a/tools/rmmod.c
>+++ b/tools/rmmod.c
>@@ -63,7 +63,7 @@ static void help(void)
>
> static int check_module_inuse(struct kmod_module *mod) {
> 	struct kmod_list *holders;
>-	int state;
>+	int state, ret;
>
> 	state = kmod_module_get_initstate(mod);
>
>@@ -93,12 +93,15 @@ static int check_module_inuse(struct kmod_module *mod) {
> 		return -EBUSY;
> 	}
>
>-	if (kmod_module_get_refcnt(mod) != 0) {
>+	ret = kmod_module_get_refcnt(mod);
>+	if (ret > 0) {
> 		ERR("Module %s is in use\n", kmod_module_get_name(mod));
> 		return -EBUSY;
>+	} else if (ret == -ENOENT) {
>+		ERR("Module unloading is not supported\n");
> 	}
>
>-	return 0;
>+	return ret;
> }
>
> static int do_rmmod(int argc, char *argv[])
>-- 
>2.20.1
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-03-08 21:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-08 20:39 [PATCH] tools: Print a message if refcnt attribute is missing Ezequiel Garcia
2019-03-08 21:09 ` Lucas De Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).