From: Rusty Russell <rusty@rustcorp.com.au>
To: John Levon <levon@movementarian.org>
Cc: oprofile-list@lists.sf.net, torvalds@transmeta.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] Module load notification take 3
Date: Thu, 27 Mar 2003 16:26:29 +1100 [thread overview]
Message-ID: <20030327062921.3D8932C08F@lists.samba.org> (raw)
In-Reply-To: Your message of "Thu, 27 Mar 2003 04:17:59 -0000." <20030327041759.GA4367@compsoc.man.ac.uk>
In message <20030327041759.GA4367@compsoc.man.ac.uk> you write:
> On Thu, Mar 27, 2003 at 01:20:23PM +1100, Rusty Russell wrote:
> ... and it's the same ill. Half-cleaned up stuff sucks. Either remove it
> or don't.
I like that attitude: I'm not sure I have the energy to match it 8)
However, please look at patch below.
> > That's because everyone realizes that the return value is useless.
>
> It detects one variant of unmatched register/unregister, so it cannot be
> said to be entirely useless. I would not call it entirely useful,
> though, I admit.
BUG() in the unregister makes sense I think (see patch).
> Beside the point though really, I appear to have made onto Linus'
> shitlist at last ... does this mean I finally graduated Linux School ?
Linus fades every so often. Has more to do with phase of the moon, I
think, than individuals.
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
Name: notifier_unregister should return void
Author: Rusty Russell
Status: Tested on 2.5.66-bk2
D: Noone uses the return value of notifier_chain_unregister and its
D: children: make it BUG() when unregistering a non-existent notifier,
D: and return void.
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/cpufreq.h working-2.5.66-bk2-notifier/include/linux/cpufreq.h
--- linux-2.5.66-bk2/include/linux/cpufreq.h 2003-03-18 12:21:40.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/cpufreq.h 2003-03-27 15:41:52.000000000 +1100
@@ -29,7 +29,7 @@
*********************************************************************/
int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list);
-int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
+void cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
#define CPUFREQ_TRANSITION_NOTIFIER (0)
#define CPUFREQ_POLICY_NOTIFIER (1)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/inetdevice.h working-2.5.66-bk2-notifier/include/linux/inetdevice.h
--- linux-2.5.66-bk2/include/linux/inetdevice.h 2003-01-02 12:34:08.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/inetdevice.h 2003-03-27 15:59:02.000000000 +1100
@@ -77,7 +77,7 @@ struct in_ifaddr
};
extern int register_inetaddr_notifier(struct notifier_block *nb);
-extern int unregister_inetaddr_notifier(struct notifier_block *nb);
+extern void unregister_inetaddr_notifier(struct notifier_block *nb);
extern struct net_device *ip_dev_find(u32 addr);
extern int inet_addr_onlink(struct in_device *in_dev, u32 a, u32 b);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/netdevice.h working-2.5.66-bk2-notifier/include/linux/netdevice.h
--- linux-2.5.66-bk2/include/linux/netdevice.h 2003-03-27 12:11:45.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/netdevice.h 2003-03-27 15:41:49.000000000 +1100
@@ -487,7 +487,7 @@ extern int dev_queue_xmit(struct sk_buf
extern int register_netdevice(struct net_device *dev);
extern int unregister_netdevice(struct net_device *dev);
extern int register_netdevice_notifier(struct notifier_block *nb);
-extern int unregister_netdevice_notifier(struct notifier_block *nb);
+extern void unregister_netdevice_notifier(struct notifier_block *nb);
extern int call_netdevice_notifiers(unsigned long val, void *v);
extern int dev_new_index(void);
extern struct net_device *dev_get_by_index(int ifindex);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/netlink.h working-2.5.66-bk2-notifier/include/linux/netlink.h
--- linux-2.5.66-bk2/include/linux/netlink.h 2003-02-07 19:16:27.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/netlink.h 2003-03-27 15:42:20.000000000 +1100
@@ -114,7 +114,7 @@ extern int netlink_broadcast(struct sock
__u32 group, int allocation);
extern void netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code);
extern int netlink_register_notifier(struct notifier_block *nb);
-extern int netlink_unregister_notifier(struct notifier_block *nb);
+extern void netlink_unregister_notifier(struct notifier_block *nb);
/*
* skb should fit one page. This choice is good for headerless malloc.
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/notifier.h working-2.5.66-bk2-notifier/include/linux/notifier.h
--- linux-2.5.66-bk2/include/linux/notifier.h 2003-01-02 12:32:49.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/notifier.h 2003-03-27 15:37:31.000000000 +1100
@@ -22,7 +22,7 @@ struct notifier_block
#ifdef __KERNEL__
extern int notifier_chain_register(struct notifier_block **list, struct notifier_block *n);
-extern int notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n);
+extern void notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n);
extern int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v);
#define NOTIFY_DONE 0x0000 /* Don't care */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/profile.h working-2.5.66-bk2-notifier/include/linux/profile.h
--- linux-2.5.66-bk2/include/linux/profile.h 2003-03-18 12:21:40.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/profile.h 2003-03-27 15:42:15.000000000 +1100
@@ -43,10 +43,10 @@ void profile_exit_mmap(struct mm_struct
int profile_event_register(enum profile_type, struct notifier_block * n);
-int profile_event_unregister(enum profile_type, struct notifier_block * n);
+void profile_event_unregister(enum profile_type, struct notifier_block * n);
int register_profile_notifier(struct notifier_block * nb);
-int unregister_profile_notifier(struct notifier_block * nb);
+void unregister_profile_notifier(struct notifier_block * nb);
/* profiling hook activated on each timer interrupt */
void profile_hook(struct pt_regs * regs);
@@ -58,9 +58,8 @@ static inline int profile_event_register
return -ENOSYS;
}
-static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
+static inline void profile_event_unregister(enum profile_type t, struct notifier_block * n)
{
- return -ENOSYS;
}
#define profile_exit_task(a) do { } while (0)
@@ -72,9 +71,8 @@ static inline int register_profile_notif
return -ENOSYS;
}
-static inline int unregister_profile_notifier(struct notifier_block * nb)
+static inline void unregister_profile_notifier(struct notifier_block * nb)
{
- return -ENOSYS;
}
#define profile_hook(regs) do { } while (0)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/linux/reboot.h working-2.5.66-bk2-notifier/include/linux/reboot.h
--- linux-2.5.66-bk2/include/linux/reboot.h 2003-02-07 19:17:54.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/linux/reboot.h 2003-03-27 15:41:56.000000000 +1100
@@ -37,7 +37,7 @@
#include <linux/notifier.h>
extern int register_reboot_notifier(struct notifier_block *);
-extern int unregister_reboot_notifier(struct notifier_block *);
+extern void unregister_reboot_notifier(struct notifier_block *);
/*
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/net/addrconf.h working-2.5.66-bk2-notifier/include/net/addrconf.h
--- linux-2.5.66-bk2/include/net/addrconf.h 2003-03-25 12:17:31.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/net/addrconf.h 2003-03-27 15:42:38.000000000 +1100
@@ -123,7 +123,7 @@ extern int ipv6_chk_acast_addr(struct
/* Device notifier */
extern int register_inet6addr_notifier(struct notifier_block *nb);
-extern int unregister_inet6addr_notifier(struct notifier_block *nb);
+extern void unregister_inet6addr_notifier(struct notifier_block *nb);
static inline struct inet6_dev *
__in6_dev_get(struct net_device *dev)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/include/net/bluetooth/hci_core.h working-2.5.66-bk2-notifier/include/net/bluetooth/hci_core.h
--- linux-2.5.66-bk2/include/net/bluetooth/hci_core.h 2003-02-25 10:11:10.000000000 +1100
+++ working-2.5.66-bk2-notifier/include/net/bluetooth/hci_core.h 2003-03-27 15:42:35.000000000 +1100
@@ -467,7 +467,7 @@ static inline void hci_proto_encrypt_cfm
int hci_register_proto(struct hci_proto *hproto);
int hci_unregister_proto(struct hci_proto *hproto);
int hci_register_notifier(struct notifier_block *nb);
-int hci_unregister_notifier(struct notifier_block *nb);
+void hci_unregister_notifier(struct notifier_block *nb);
int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/kernel/cpufreq.c working-2.5.66-bk2-notifier/kernel/cpufreq.c
--- linux-2.5.66-bk2/kernel/cpufreq.c 2003-03-25 12:17:31.000000000 +1100
+++ working-2.5.66-bk2-notifier/kernel/cpufreq.c 2003-03-27 15:43:36.000000000 +1100
@@ -484,27 +484,22 @@ EXPORT_SYMBOL(cpufreq_register_notifier)
*
* Remove a driver from the CPU frequency notifier list.
*
- * This function may sleep, and has the same return conditions as
- * notifier_chain_unregister.
+ * This function may sleep.
*/
-int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
+void cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
{
- int ret;
-
down_write(&cpufreq_notifier_rwsem);
switch (list) {
case CPUFREQ_TRANSITION_NOTIFIER:
- ret = notifier_chain_unregister(&cpufreq_transition_notifier_list, nb);
+ notifier_chain_unregister(&cpufreq_transition_notifier_list, nb);
break;
case CPUFREQ_POLICY_NOTIFIER:
- ret = notifier_chain_unregister(&cpufreq_policy_notifier_list, nb);
+ notifier_chain_unregister(&cpufreq_policy_notifier_list, nb);
break;
default:
- ret = -EINVAL;
+ BUG();
}
up_write(&cpufreq_notifier_rwsem);
-
- return ret;
}
EXPORT_SYMBOL(cpufreq_unregister_notifier);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/kernel/profile.c working-2.5.66-bk2-notifier/kernel/profile.c
--- linux-2.5.66-bk2/kernel/profile.c 2003-02-25 10:11:11.000000000 +1100
+++ working-2.5.66-bk2-notifier/kernel/profile.c 2003-03-27 15:44:06.000000000 +1100
@@ -97,26 +97,23 @@ int profile_event_register(enum profile_
}
-int profile_event_unregister(enum profile_type type, struct notifier_block * n)
+void profile_event_unregister(enum profile_type type, struct notifier_block * n)
{
- int err = -EINVAL;
-
down_write(&profile_rwsem);
switch (type) {
case EXIT_TASK:
- err = notifier_chain_unregister(&exit_task_notifier, n);
+ notifier_chain_unregister(&exit_task_notifier, n);
break;
case EXIT_MMAP:
- err = notifier_chain_unregister(&exit_mmap_notifier, n);
+ notifier_chain_unregister(&exit_mmap_notifier, n);
break;
case EXEC_UNMAP:
- err = notifier_chain_unregister(&exec_unmap_notifier, n);
+ notifier_chain_unregister(&exec_unmap_notifier, n);
break;
}
up_write(&profile_rwsem);
- return err;
}
static struct notifier_block * profile_listeners;
@@ -132,13 +129,11 @@ int register_profile_notifier(struct not
}
-int unregister_profile_notifier(struct notifier_block * nb)
+void unregister_profile_notifier(struct notifier_block * nb)
{
- int err;
write_lock_irq(&profile_lock);
- err = notifier_chain_unregister(&profile_listeners, nb);
+ notifier_chain_unregister(&profile_listeners, nb);
write_unlock_irq(&profile_lock);
- return err;
}
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/kernel/sys.c working-2.5.66-bk2-notifier/kernel/sys.c
--- linux-2.5.66-bk2/kernel/sys.c 2003-03-25 12:17:32.000000000 +1100
+++ working-2.5.66-bk2-notifier/kernel/sys.c 2003-03-27 16:07:33.000000000 +1100
@@ -111,11 +111,9 @@ int notifier_chain_register(struct notif
* @n: New entry in notifier chain
*
* Removes a notifier from a notifier chain.
- *
- * Returns zero on success, or %-ENOENT on failure.
*/
-int notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n)
+void notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n)
{
write_lock(¬ifier_lock);
while((*nl)!=NULL)
@@ -124,12 +122,12 @@ int notifier_chain_unregister(struct not
{
*nl=n->next;
write_unlock(¬ifier_lock);
- return 0;
+ return;
}
nl=&((*nl)->next);
}
write_unlock(¬ifier_lock);
- return -ENOENT;
+ BUG();
}
/**
@@ -187,13 +185,11 @@ int register_reboot_notifier(struct noti
*
* Unregisters a previously registered reboot
* notifier function.
- *
- * Returns zero on success, or %-ENOENT on failure.
*/
-int unregister_reboot_notifier(struct notifier_block * nb)
+void unregister_reboot_notifier(struct notifier_block * nb)
{
- return notifier_chain_unregister(&reboot_notifier_list, nb);
+ notifier_chain_unregister(&reboot_notifier_list, nb);
}
asmlinkage long sys_ni_syscall(void)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/net/bluetooth/hci_core.c working-2.5.66-bk2-notifier/net/bluetooth/hci_core.c
--- linux-2.5.66-bk2/net/bluetooth/hci_core.c 2003-02-25 10:11:12.000000000 +1100
+++ working-2.5.66-bk2-notifier/net/bluetooth/hci_core.c 2003-03-27 15:44:54.000000000 +1100
@@ -83,9 +83,9 @@ int hci_register_notifier(struct notifie
return notifier_chain_register(&hci_notifier, nb);
}
-int hci_unregister_notifier(struct notifier_block *nb)
+void hci_unregister_notifier(struct notifier_block *nb)
{
- return notifier_chain_unregister(&hci_notifier, nb);
+ notifier_chain_unregister(&hci_notifier, nb);
}
void hci_notify(struct hci_dev *hdev, int event)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/net/core/dev.c working-2.5.66-bk2-notifier/net/core/dev.c
--- linux-2.5.66-bk2/net/core/dev.c 2003-03-25 12:17:32.000000000 +1100
+++ working-2.5.66-bk2-notifier/net/core/dev.c 2003-03-27 15:45:14.000000000 +1100
@@ -912,13 +912,12 @@ int register_netdevice_notifier(struct n
*
* Unregister a notifier previously registered by
* register_netdevice_notifier(). The notifier is unlinked into the
- * kernel structures and may then be reused. A negative errno code
- * is returned on a failure.
+ * kernel structures and may then be reused.
*/
-int unregister_netdevice_notifier(struct notifier_block *nb)
+void unregister_netdevice_notifier(struct notifier_block *nb)
{
- return notifier_chain_unregister(&netdev_chain, nb);
+ notifier_chain_unregister(&netdev_chain, nb);
}
/**
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/net/ipv4/devinet.c working-2.5.66-bk2-notifier/net/ipv4/devinet.c
--- linux-2.5.66-bk2/net/ipv4/devinet.c 2003-02-11 14:26:21.000000000 +1100
+++ working-2.5.66-bk2-notifier/net/ipv4/devinet.c 2003-03-27 15:45:31.000000000 +1100
@@ -818,9 +818,9 @@ int register_inetaddr_notifier(struct no
return notifier_chain_register(&inetaddr_chain, nb);
}
-int unregister_inetaddr_notifier(struct notifier_block *nb)
+void unregister_inetaddr_notifier(struct notifier_block *nb)
{
- return notifier_chain_unregister(&inetaddr_chain, nb);
+ notifier_chain_unregister(&inetaddr_chain, nb);
}
/* Rename ifa_labels for a device name change. Make some effort to preserve existing
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/net/ipv6/addrconf.c working-2.5.66-bk2-notifier/net/ipv6/addrconf.c
--- linux-2.5.66-bk2/net/ipv6/addrconf.c 2003-03-25 12:17:33.000000000 +1100
+++ working-2.5.66-bk2-notifier/net/ipv6/addrconf.c 2003-03-27 15:45:42.000000000 +1100
@@ -2636,9 +2636,9 @@ int register_inet6addr_notifier(struct n
return notifier_chain_register(&inet6addr_chain, nb);
}
-int unregister_inet6addr_notifier(struct notifier_block *nb)
+void unregister_inet6addr_notifier(struct notifier_block *nb)
{
- return notifier_chain_unregister(&inet6addr_chain,nb);
+ notifier_chain_unregister(&inet6addr_chain,nb);
}
/*
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.66-bk2/net/netlink/af_netlink.c working-2.5.66-bk2-notifier/net/netlink/af_netlink.c
--- linux-2.5.66-bk2/net/netlink/af_netlink.c 2003-03-18 12:21:41.000000000 +1100
+++ working-2.5.66-bk2-notifier/net/netlink/af_netlink.c 2003-03-27 15:45:53.000000000 +1100
@@ -1023,9 +1023,9 @@ int netlink_register_notifier(struct not
return notifier_chain_register(&netlink_chain, nb);
}
-int netlink_unregister_notifier(struct notifier_block *nb)
+void netlink_unregister_notifier(struct notifier_block *nb)
{
- return notifier_chain_unregister(&netlink_chain, nb);
+ notifier_chain_unregister(&netlink_chain, nb);
}
struct proto_ops netlink_ops = {
prev parent reply other threads:[~2003-03-27 6:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-03-25 2:03 [PATCH 1/2] Module load notification take 3 John Levon
2003-03-25 2:13 ` [PATCH 2/2] " John Levon
2003-03-25 6:32 ` [PATCH 1/2] " Rusty Russell
2003-03-25 11:41 ` John Levon
2003-03-27 2:20 ` Rusty Russell
2003-03-27 4:17 ` John Levon
2003-03-27 5:26 ` Rusty Russell [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030327062921.3D8932C08F@lists.samba.org \
--to=rusty@rustcorp.com.au \
--cc=levon@movementarian.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oprofile-list@lists.sf.net \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.