From: Alan Stern Notifier chain re-implementation (as633b): Simple changes that involve only the definition or declaration of chain heads. Signed-off-by: Alan Stern Signed-off-by: Chandra Seetharaman Signed-off-by: Andrew Morton --- arch/alpha/kernel/setup.c | 5 +- arch/powerpc/platforms/pseries/reconfig.c | 10 ++-- arch/s390/kernel/process.c | 11 ++-- drivers/base/memory.c | 8 +-- drivers/char/ipmi/ipmi_si_intf.c | 7 +-- drivers/macintosh/adb.c | 11 +++- drivers/macintosh/adbhid.c | 3 - drivers/macintosh/via-pmu.c | 2 drivers/macintosh/via-pmu68k.c | 7 +-- drivers/macintosh/windfarm_core.c | 8 +-- drivers/net/bonding/bond_main.c | 2 drivers/video/fbmem.c | 31 +++++++------ include/linux/adb.h | 2 include/linux/kernel.h | 2 include/linux/memory.h | 1 include/linux/netfilter_ipv4/ip_conntrack.h | 17 +++---- include/net/netfilter/nf_conntrack.h | 17 +++---- kernel/panic.c | 4 - kernel/sys.c | 12 ++--- net/bluetooth/hci_core.c | 8 +-- net/core/dev.c | 42 +++++++++--------- net/decnet/dn_dev.c | 10 ++-- net/ipv4/devinet.c | 16 +++--- net/ipv4/netfilter/ip_conntrack_core.c | 6 +- net/ipv6/addrconf.c | 10 ++-- net/netfilter/nf_conntrack_core.c | 6 +- net/netlink/af_netlink.c | 9 ++- 27 files changed, 143 insertions(+), 124 deletions(-) diff -puN arch/alpha/kernel/setup.c~notifier-chain-update-simple-definition-changes arch/alpha/kernel/setup.c --- devel/arch/alpha/kernel/setup.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/arch/alpha/kernel/setup.c 2006-03-16 02:09:11.000000000 -0800 @@ -43,7 +43,7 @@ #include #include -extern struct notifier_block *panic_notifier_list; +extern struct atomic_notifier_head panic_notifier_list; static int alpha_panic_event(struct notifier_block *, unsigned long, void *); static struct notifier_block alpha_panic_block = { alpha_panic_event, @@ -508,7 +508,8 @@ setup_arch(char **cmdline_p) } /* Register a call for panic conditions. */ - notifier_chain_register(&panic_notifier_list, &alpha_panic_block); + atomic_notifier_chain_register(&panic_notifier_list, + &alpha_panic_block); #ifdef CONFIG_ALPHA_GENERIC /* Assume that we've booted from SRM if we haven't booted from MILO. diff -puN arch/powerpc/platforms/pseries/reconfig.c~notifier-chain-update-simple-definition-changes arch/powerpc/platforms/pseries/reconfig.c --- devel/arch/powerpc/platforms/pseries/reconfig.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/arch/powerpc/platforms/pseries/reconfig.c 2006-03-16 02:09:11.000000000 -0800 @@ -94,16 +94,16 @@ static struct device_node *derive_parent return parent; } -static struct notifier_block *pSeries_reconfig_chain; +static BLOCKING_NOTIFIER_HEAD(pSeries_reconfig_chain); int pSeries_reconfig_notifier_register(struct notifier_block *nb) { - return notifier_chain_register(&pSeries_reconfig_chain, nb); + return blocking_notifier_chain_register(&pSeries_reconfig_chain, nb); } void pSeries_reconfig_notifier_unregister(struct notifier_block *nb) { - notifier_chain_unregister(&pSeries_reconfig_chain, nb); + blocking_notifier_chain_unregister(&pSeries_reconfig_chain, nb); } static int pSeries_reconfig_add_node(const char *path, struct property *proplist) @@ -131,7 +131,7 @@ static int pSeries_reconfig_add_node(con goto out_err; } - err = notifier_call_chain(&pSeries_reconfig_chain, + err = blocking_notifier_call_chain(&pSeries_reconfig_chain, PSERIES_RECONFIG_ADD, np); if (err == NOTIFY_BAD) { printk(KERN_ERR "Failed to add device node %s\n", path); @@ -171,7 +171,7 @@ static int pSeries_reconfig_remove_node( remove_node_proc_entries(np); - notifier_call_chain(&pSeries_reconfig_chain, + blocking_notifier_call_chain(&pSeries_reconfig_chain, PSERIES_RECONFIG_REMOVE, np); of_detach_node(np); diff -puN arch/s390/kernel/process.c~notifier-chain-update-simple-definition-changes arch/s390/kernel/process.c --- devel/arch/s390/kernel/process.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/arch/s390/kernel/process.c 2006-03-16 02:09:11.000000000 -0800 @@ -76,17 +76,17 @@ unsigned long thread_saved_pc(struct tas /* * Need to know about CPUs going idle? */ -static struct notifier_block *idle_chain; +static BLOCKING_NOTIFIER_HEAD(idle_chain); int register_idle_notifier(struct notifier_block *nb) { - return notifier_chain_register(&idle_chain, nb); + return blocking_notifier_chain_register(&idle_chain, nb); } EXPORT_SYMBOL(register_idle_notifier); int unregister_idle_notifier(struct notifier_block *nb) { - return notifier_chain_unregister(&idle_chain, nb); + return blocking_notifier_chain_unregister(&idle_chain, nb); } EXPORT_SYMBOL(unregister_idle_notifier); @@ -95,7 +95,7 @@ void do_monitor_call(struct pt_regs *reg /* disable monitor call class 0 */ __ctl_clear_bit(8, 15); - notifier_call_chain(&idle_chain, CPU_NOT_IDLE, + blocking_notifier_call_chain(&idle_chain, CPU_NOT_IDLE, (void *)(long) smp_processor_id()); } @@ -116,7 +116,8 @@ static void default_idle(void) return; } - rc = notifier_call_chain(&idle_chain, CPU_IDLE, (void *)(long) cpu); + rc = blocking_notifier_call_chain(&idle_chain, + CPU_IDLE, (void *)(long) cpu); if (rc != NOTIFY_OK && rc != NOTIFY_DONE) BUG(); if (rc != NOTIFY_OK) { diff -puN drivers/base/memory.c~notifier-chain-update-simple-definition-changes drivers/base/memory.c --- devel/drivers/base/memory.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/base/memory.c 2006-03-16 02:09:11.000000000 -0800 @@ -47,16 +47,16 @@ static struct kset_uevent_ops memory_uev .uevent = memory_uevent, }; -static struct notifier_block *memory_chain; +static BLOCKING_NOTIFIER_HEAD(memory_chain); int register_memory_notifier(struct notifier_block *nb) { - return notifier_chain_register(&memory_chain, nb); + return blocking_notifier_chain_register(&memory_chain, nb); } void unregister_memory_notifier(struct notifier_block *nb) { - notifier_chain_unregister(&memory_chain, nb); + blocking_notifier_chain_unregister(&memory_chain, nb); } /* @@ -140,7 +140,7 @@ static ssize_t show_mem_state(struct sys static inline int memory_notify(unsigned long val, void *v) { - return notifier_call_chain(&memory_chain, val, v); + return blocking_notifier_call_chain(&memory_chain, val, v); } /* diff -puN drivers/char/ipmi/ipmi_si_intf.c~notifier-chain-update-simple-definition-changes drivers/char/ipmi/ipmi_si_intf.c --- devel/drivers/char/ipmi/ipmi_si_intf.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/char/ipmi/ipmi_si_intf.c 2006-03-16 02:09:11.000000000 -0800 @@ -226,10 +226,10 @@ struct smi_info struct task_struct *thread; }; -static struct notifier_block *xaction_notifier_list; +static ATOMIC_NOTIFIER_HEAD(xaction_notifier_list); static int register_xaction_notifier(struct notifier_block * nb) { - return notifier_chain_register(&xaction_notifier_list, nb); + return atomic_notifier_chain_register(&xaction_notifier_list, nb); } static void si_restart_short_timer(struct smi_info *smi_info); @@ -291,7 +291,8 @@ static enum si_sm_result start_next_msg( do_gettimeofday(&t); printk("**Start2: %d.%9.9d\n", t.tv_sec, t.tv_usec); #endif - err = notifier_call_chain(&xaction_notifier_list, 0, smi_info); + err = atomic_notifier_call_chain(&xaction_notifier_list, + 0, smi_info); if (err & NOTIFY_STOP_MASK) { rv = SI_SM_CALL_WITHOUT_DELAY; goto out; diff -puN drivers/macintosh/adb.c~notifier-chain-update-simple-definition-changes drivers/macintosh/adb.c --- devel/drivers/macintosh/adb.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/macintosh/adb.c 2006-03-16 02:09:11.000000000 -0800 @@ -80,7 +80,7 @@ static struct adb_driver *adb_driver_lis static struct class *adb_dev_class; struct adb_driver *adb_controller; -struct notifier_block *adb_client_list = NULL; +BLOCKING_NOTIFIER_HEAD(adb_client_list); static int adb_got_sleep; static int adb_inited; static pid_t adb_probe_task_pid; @@ -354,7 +354,8 @@ adb_notify_sleep(struct pmu_sleep_notifi /* Stop autopoll */ if (adb_controller->autopoll) adb_controller->autopoll(0); - ret = notifier_call_chain(&adb_client_list, ADB_MSG_POWERDOWN, NULL); + ret = blocking_notifier_call_chain(&adb_client_list, + ADB_MSG_POWERDOWN, NULL); if (ret & NOTIFY_STOP_MASK) { up(&adb_probe_mutex); return PBOOK_SLEEP_REFUSE; @@ -391,7 +392,8 @@ do_adb_reset_bus(void) if (adb_controller->autopoll) adb_controller->autopoll(0); - nret = notifier_call_chain(&adb_client_list, ADB_MSG_PRE_RESET, NULL); + nret = blocking_notifier_call_chain(&adb_client_list, + ADB_MSG_PRE_RESET, NULL); if (nret & NOTIFY_STOP_MASK) { if (adb_controller->autopoll) adb_controller->autopoll(autopoll_devs); @@ -426,7 +428,8 @@ do_adb_reset_bus(void) } up(&adb_handler_sem); - nret = notifier_call_chain(&adb_client_list, ADB_MSG_POST_RESET, NULL); + nret = blocking_notifier_call_chain(&adb_client_list, + ADB_MSG_POST_RESET, NULL); if (nret & NOTIFY_STOP_MASK) return -EBUSY; diff -puN drivers/macintosh/adbhid.c~notifier-chain-update-simple-definition-changes drivers/macintosh/adbhid.c --- devel/drivers/macintosh/adbhid.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/macintosh/adbhid.c 2006-03-16 02:09:11.000000000 -0800 @@ -1303,7 +1303,8 @@ static int __init adbhid_init(void) adbhid_probe(); - notifier_chain_register(&adb_client_list, &adbhid_adb_notifier); + blocking_notifier_chain_register(&adb_client_list, + &adbhid_adb_notifier); return 0; } diff -puN drivers/macintosh/via-pmu68k.c~notifier-chain-update-simple-definition-changes drivers/macintosh/via-pmu68k.c --- devel/drivers/macintosh/via-pmu68k.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/macintosh/via-pmu68k.c 2006-03-16 02:09:11.000000000 -0800 @@ -102,7 +102,7 @@ static int pmu_kind = PMU_UNKNOWN; static int pmu_fully_inited = 0; int asleep; -struct notifier_block *sleep_notifier_list; +BLOCKING_NOTIFIER_HEAD(sleep_notifier_list); static int pmu_probe(void); static int pmu_init(void); @@ -913,7 +913,8 @@ int powerbook_sleep(void) struct adb_request sleep_req; /* Notify device drivers */ - ret = notifier_call_chain(&sleep_notifier_list, PBOOK_SLEEP, NULL); + ret = blocking_notifier_call_chain(&sleep_notifier_list, + PBOOK_SLEEP, NULL); if (ret & NOTIFY_STOP_MASK) return -EBUSY; @@ -984,7 +985,7 @@ int powerbook_sleep(void) enable_irq(i); /* Notify drivers */ - notifier_call_chain(&sleep_notifier_list, PBOOK_WAKE, NULL); + blocking_notifier_call_chain(&sleep_notifier_list, PBOOK_WAKE, NULL); /* reenable ADB autopoll */ pmu_adb_autopoll(adb_dev_map); diff -puN drivers/macintosh/via-pmu.c~notifier-chain-update-simple-definition-changes drivers/macintosh/via-pmu.c --- devel/drivers/macintosh/via-pmu.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/macintosh/via-pmu.c 2006-03-16 02:09:11.000000000 -0800 @@ -187,7 +187,7 @@ extern int disable_kernel_backlight; int __fake_sleep; int asleep; -struct notifier_block *sleep_notifier_list; +BLOCKING_NOTIFIER_HEAD(sleep_notifier_list); #ifdef CONFIG_ADB static int adb_dev_map = 0; diff -puN drivers/macintosh/windfarm_core.c~notifier-chain-update-simple-definition-changes drivers/macintosh/windfarm_core.c --- devel/drivers/macintosh/windfarm_core.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/macintosh/windfarm_core.c 2006-03-16 02:09:11.000000000 -0800 @@ -52,7 +52,7 @@ static LIST_HEAD(wf_controls); static LIST_HEAD(wf_sensors); static DEFINE_MUTEX(wf_lock); -static struct notifier_block *wf_client_list; +static BLOCKING_NOTIFIER_HEAD(wf_client_list); static int wf_client_count; static unsigned int wf_overtemp; static unsigned int wf_overtemp_counter; @@ -68,7 +68,7 @@ static struct platform_device wf_platfor static inline void wf_notify(int event, void *param) { - notifier_call_chain(&wf_client_list, event, param); + blocking_notifier_call_chain(&wf_client_list, event, param); } int wf_critical_overtemp(void) @@ -398,7 +398,7 @@ int wf_register_client(struct notifier_b struct wf_sensor *sr; mutex_lock(&wf_lock); - rc = notifier_chain_register(&wf_client_list, nb); + rc = blocking_notifier_chain_register(&wf_client_list, nb); if (rc != 0) goto bail; wf_client_count++; @@ -417,7 +417,7 @@ EXPORT_SYMBOL_GPL(wf_register_client); int wf_unregister_client(struct notifier_block *nb) { mutex_lock(&wf_lock); - notifier_chain_unregister(&wf_client_list, nb); + blocking_notifier_chain_unregister(&wf_client_list, nb); wf_client_count++; if (wf_client_count == 0) wf_stop_thread(); diff -puN drivers/net/bonding/bond_main.c~notifier-chain-update-simple-definition-changes drivers/net/bonding/bond_main.c --- devel/drivers/net/bonding/bond_main.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/net/bonding/bond_main.c 2006-03-16 02:09:11.000000000 -0800 @@ -3159,7 +3159,7 @@ static int bond_slave_netdev_event(unsig * bond_netdev_event: handle netdev notifier chain events. * * This function receives events for the netdev chain. The caller (an - * ioctl handler calling notifier_call_chain) holds the necessary + * ioctl handler calling blocking_notifier_call_chain) holds the necessary * locks for us to safely manipulate the slave devices (RTNL lock, * dev_probe_lock). */ diff -puN drivers/video/fbmem.c~notifier-chain-update-simple-definition-changes drivers/video/fbmem.c --- devel/drivers/video/fbmem.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/drivers/video/fbmem.c 2006-03-16 02:09:11.000000000 -0800 @@ -55,7 +55,7 @@ #define FBPIXMAPSIZE (1024 * 8) -static struct notifier_block *fb_notifier_list; +static BLOCKING_NOTIFIER_HEAD(fb_notifier_list); struct fb_info *registered_fb[FB_MAX]; int num_registered_fb; @@ -784,7 +784,7 @@ fb_set_var(struct fb_info *info, struct event.info = info; event.data = &mode1; - ret = notifier_call_chain(&fb_notifier_list, + ret = blocking_notifier_call_chain(&fb_notifier_list, FB_EVENT_MODE_DELETE, &event); } @@ -830,8 +830,8 @@ fb_set_var(struct fb_info *info, struct info->flags &= ~FBINFO_MISC_USEREVENT; event.info = info; - notifier_call_chain(&fb_notifier_list, evnt, - &event); + blocking_notifier_call_chain(&fb_notifier_list, + evnt, &event); } } } @@ -854,7 +854,8 @@ fb_blank(struct fb_info *info, int blank event.info = info; event.data = ␣ - notifier_call_chain(&fb_notifier_list, FB_EVENT_BLANK, &event); + blocking_notifier_call_chain(&fb_notifier_list, + FB_EVENT_BLANK, &event); } return ret; @@ -925,7 +926,7 @@ fb_ioctl(struct inode *inode, struct fil con2fb.framebuffer = -1; event.info = info; event.data = &con2fb; - notifier_call_chain(&fb_notifier_list, + blocking_notifier_call_chain(&fb_notifier_list, FB_EVENT_GET_CONSOLE_MAP, &event); return copy_to_user(argp, &con2fb, sizeof(con2fb)) ? -EFAULT : 0; @@ -944,7 +945,7 @@ fb_ioctl(struct inode *inode, struct fil return -EINVAL; event.info = info; event.data = &con2fb; - return notifier_call_chain(&fb_notifier_list, + return blocking_notifier_call_chain(&fb_notifier_list, FB_EVENT_SET_CONSOLE_MAP, &event); case FBIOBLANK: @@ -1330,7 +1331,7 @@ register_framebuffer(struct fb_info *fb_ devfs_mk_cdev(MKDEV(FB_MAJOR, i), S_IFCHR | S_IRUGO | S_IWUGO, "fb/%d", i); event.info = fb_info; - notifier_call_chain(&fb_notifier_list, + blocking_notifier_call_chain(&fb_notifier_list, FB_EVENT_FB_REGISTERED, &event); return 0; } @@ -1372,7 +1373,7 @@ unregister_framebuffer(struct fb_info *f */ int fb_register_client(struct notifier_block *nb) { - return notifier_chain_register(&fb_notifier_list, nb); + return blocking_notifier_chain_register(&fb_notifier_list, nb); } /** @@ -1381,7 +1382,7 @@ int fb_register_client(struct notifier_b */ int fb_unregister_client(struct notifier_block *nb) { - return notifier_chain_unregister(&fb_notifier_list, nb); + return blocking_notifier_chain_unregister(&fb_notifier_list, nb); } /** @@ -1399,11 +1400,13 @@ void fb_set_suspend(struct fb_info *info event.info = info; if (state) { - notifier_call_chain(&fb_notifier_list, FB_EVENT_SUSPEND, &event); + blocking_notifier_call_chain(&fb_notifier_list, + FB_EVENT_SUSPEND, &event); info->state = FBINFO_STATE_SUSPENDED; } else { info->state = FBINFO_STATE_RUNNING; - notifier_call_chain(&fb_notifier_list, FB_EVENT_RESUME, &event); + blocking_notifier_call_chain(&fb_notifier_list, + FB_EVENT_RESUME, &event); } } @@ -1475,7 +1478,7 @@ int fb_new_modelist(struct fb_info *info if (!list_empty(&info->modelist)) { event.info = info; - err = notifier_call_chain(&fb_notifier_list, + err = blocking_notifier_call_chain(&fb_notifier_list, FB_EVENT_NEW_MODELIST, &event); } @@ -1501,7 +1504,7 @@ int fb_con_duit(struct fb_info *info, in evnt.info = info; evnt.data = data; - return notifier_call_chain(&fb_notifier_list, event, &evnt); + return blocking_notifier_call_chain(&fb_notifier_list, event, &evnt); } EXPORT_SYMBOL(fb_con_duit); diff -puN include/linux/adb.h~notifier-chain-update-simple-definition-changes include/linux/adb.h --- devel/include/linux/adb.h~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/include/linux/adb.h 2006-03-16 02:09:11.000000000 -0800 @@ -85,7 +85,7 @@ enum adb_message { ADB_MSG_POST_RESET /* Called after resetting the bus (re-do init & register) */ }; extern struct adb_driver *adb_controller; -extern struct notifier_block *adb_client_list; +extern struct blocking_notifier_head adb_client_list; int adb_request(struct adb_request *req, void (*done)(struct adb_request *), int flags, int nbytes, ...); diff -puN include/linux/kernel.h~notifier-chain-update-simple-definition-changes include/linux/kernel.h --- devel/include/linux/kernel.h~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/include/linux/kernel.h 2006-03-16 02:09:11.000000000 -0800 @@ -94,7 +94,7 @@ extern int cond_resched(void); (__x < 0) ? -__x : __x; \ }) -extern struct notifier_block *panic_notifier_list; +extern struct atomic_notifier_head panic_notifier_list; extern long (*panic_blink)(long time); NORET_TYPE void panic(const char * fmt, ...) __attribute__ ((NORET_AND format (printf, 1, 2))); diff -puN include/linux/memory.h~notifier-chain-update-simple-definition-changes include/linux/memory.h --- devel/include/linux/memory.h~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/include/linux/memory.h 2006-03-16 02:09:11.000000000 -0800 @@ -77,7 +77,6 @@ extern int remove_memory_block(unsigned #define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<name_hlist); hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name)); - notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev); + blocking_notifier_call_chain(&netdev_chain, + NETDEV_CHANGENAME, dev); } return err; @@ -750,7 +751,7 @@ int dev_change_name(struct net_device *d */ void netdev_features_change(struct net_device *dev) { - notifier_call_chain(&netdev_chain, NETDEV_FEAT_CHANGE, dev); + blocking_notifier_call_chain(&netdev_chain, NETDEV_FEAT_CHANGE, dev); } EXPORT_SYMBOL(netdev_features_change); @@ -765,7 +766,8 @@ EXPORT_SYMBOL(netdev_features_change); void netdev_state_change(struct net_device *dev) { if (dev->flags & IFF_UP) { - notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev); + blocking_notifier_call_chain(&netdev_chain, + NETDEV_CHANGE, dev); rtmsg_ifinfo(RTM_NEWLINK, dev, 0); } } @@ -862,7 +864,7 @@ int dev_open(struct net_device *dev) /* * ... and announce new interface. */ - notifier_call_chain(&netdev_chain, NETDEV_UP, dev); + blocking_notifier_call_chain(&netdev_chain, NETDEV_UP, dev); } return ret; } @@ -885,7 +887,7 @@ int dev_close(struct net_device *dev) * Tell people we are going down, so that they can * prepare to death, when device is still operating. */ - notifier_call_chain(&netdev_chain, NETDEV_GOING_DOWN, dev); + blocking_notifier_call_chain(&netdev_chain, NETDEV_GOING_DOWN, dev); dev_deactivate(dev); @@ -922,7 +924,7 @@ int dev_close(struct net_device *dev) /* * Tell people we are down */ - notifier_call_chain(&netdev_chain, NETDEV_DOWN, dev); + blocking_notifier_call_chain(&netdev_chain, NETDEV_DOWN, dev); return 0; } @@ -953,7 +955,7 @@ int register_netdevice_notifier(struct n int err; rtnl_lock(); - err = notifier_chain_register(&netdev_chain, nb); + err = blocking_notifier_chain_register(&netdev_chain, nb); if (!err) { for (dev = dev_base; dev; dev = dev->next) { nb->notifier_call(nb, NETDEV_REGISTER, dev); @@ -978,7 +980,7 @@ int register_netdevice_notifier(struct n int unregister_netdevice_notifier(struct notifier_block *nb) { - return notifier_chain_unregister(&netdev_chain, nb); + return blocking_notifier_chain_unregister(&netdev_chain, nb); } /** @@ -987,12 +989,12 @@ int unregister_netdevice_notifier(struct * @v: pointer passed unmodified to notifier function * * Call all network notifier blocks. Parameters and return value - * are as for notifier_call_chain(). + * are as for blocking_notifier_call_chain(). */ int call_netdevice_notifiers(unsigned long val, void *v) { - return notifier_call_chain(&netdev_chain, val, v); + return blocking_notifier_call_chain(&netdev_chain, val, v); } /* When > 0 there are consumers of rx skb time stamps */ @@ -2237,7 +2239,8 @@ int dev_change_flags(struct net_device * if (dev->flags & IFF_UP && ((old_flags ^ dev->flags) &~ (IFF_UP | IFF_PROMISC | IFF_ALLMULTI | IFF_VOLATILE))) - notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev); + blocking_notifier_call_chain(&netdev_chain, + NETDEV_CHANGE, dev); if ((flags ^ dev->gflags) & IFF_PROMISC) { int inc = (flags & IFF_PROMISC) ? +1 : -1; @@ -2281,8 +2284,8 @@ int dev_set_mtu(struct net_device *dev, else dev->mtu = new_mtu; if (!err && dev->flags & IFF_UP) - notifier_call_chain(&netdev_chain, - NETDEV_CHANGEMTU, dev); + blocking_notifier_call_chain(&netdev_chain, + NETDEV_CHANGEMTU, dev); return err; } @@ -2298,7 +2301,8 @@ int dev_set_mac_address(struct net_devic return -ENODEV; err = dev->set_mac_address(dev, sa); if (!err) - notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev); + blocking_notifier_call_chain(&netdev_chain, + NETDEV_CHANGEADDR, dev); return err; } @@ -2354,7 +2358,7 @@ static int dev_ifsioc(struct ifreq *ifr, return -EINVAL; memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, min(sizeof ifr->ifr_hwaddr.sa_data, (size_t) dev->addr_len)); - notifier_call_chain(&netdev_chain, + blocking_notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev); return 0; @@ -2808,7 +2812,7 @@ int register_netdevice(struct net_device write_unlock_bh(&dev_base_lock); /* Notify protocols, that a new device appeared. */ - notifier_call_chain(&netdev_chain, NETDEV_REGISTER, dev); + blocking_notifier_call_chain(&netdev_chain, NETDEV_REGISTER, dev); /* Finish registration after unlock */ net_set_todo(dev); @@ -2887,7 +2891,7 @@ static void netdev_wait_allrefs(struct n rtnl_lock(); /* Rebroadcast unregister notification */ - notifier_call_chain(&netdev_chain, + blocking_notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev); if (test_bit(__LINK_STATE_LINKWATCH_PENDING, @@ -3143,7 +3147,7 @@ int unregister_netdevice(struct net_devi /* Notify protocols, that we are about to destroy this device. They should clean all the things. */ - notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev); + blocking_notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev); /* * Flush the multicast chain diff -puN net/decnet/dn_dev.c~notifier-chain-update-simple-definition-changes net/decnet/dn_dev.c --- devel/net/decnet/dn_dev.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/net/decnet/dn_dev.c 2006-03-16 02:09:11.000000000 -0800 @@ -68,7 +68,7 @@ __le16 decnet_address = 0; static DEFINE_RWLOCK(dndev_lock); static struct net_device *decnet_default_device; -static struct notifier_block *dnaddr_chain; +static BLOCKING_NOTIFIER_HEAD(dnaddr_chain); static struct dn_dev *dn_dev_create(struct net_device *dev, int *err); static void dn_dev_delete(struct net_device *dev); @@ -446,7 +446,7 @@ static void dn_dev_del_ifa(struct dn_dev } rtmsg_ifa(RTM_DELADDR, ifa1); - notifier_call_chain(&dnaddr_chain, NETDEV_DOWN, ifa1); + blocking_notifier_call_chain(&dnaddr_chain, NETDEV_DOWN, ifa1); if (destroy) { dn_dev_free_ifa(ifa1); @@ -481,7 +481,7 @@ static int dn_dev_insert_ifa(struct dn_d dn_db->ifa_list = ifa; rtmsg_ifa(RTM_NEWADDR, ifa); - notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa); + blocking_notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa); return 0; } @@ -1285,12 +1285,12 @@ void dn_dev_devices_on(void) int register_dnaddr_notifier(struct notifier_block *nb) { - return notifier_chain_register(&dnaddr_chain, nb); + return blocking_notifier_chain_register(&dnaddr_chain, nb); } int unregister_dnaddr_notifier(struct notifier_block *nb) { - return notifier_chain_unregister(&dnaddr_chain, nb); + return blocking_notifier_chain_unregister(&dnaddr_chain, nb); } #ifdef CONFIG_PROC_FS diff -puN net/ipv4/devinet.c~notifier-chain-update-simple-definition-changes net/ipv4/devinet.c --- devel/net/ipv4/devinet.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/net/ipv4/devinet.c 2006-03-16 02:09:11.000000000 -0800 @@ -81,7 +81,7 @@ static struct ipv4_devconf ipv4_devconf_ static void rtmsg_ifa(int event, struct in_ifaddr *); -static struct notifier_block *inetaddr_chain; +static BLOCKING_NOTIFIER_HEAD(inetaddr_chain); static void inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap, int destroy); #ifdef CONFIG_SYSCTL @@ -267,7 +267,8 @@ static void inet_del_ifa(struct in_devic *ifap1 = ifa->ifa_next; rtmsg_ifa(RTM_DELADDR, ifa); - notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa); + blocking_notifier_call_chain(&inetaddr_chain, + NETDEV_DOWN, ifa); inet_free_ifa(ifa); } else { promote = ifa; @@ -291,7 +292,7 @@ static void inet_del_ifa(struct in_devic So that, this order is correct. */ rtmsg_ifa(RTM_DELADDR, ifa1); - notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1); + blocking_notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1); if (promote) { @@ -303,7 +304,8 @@ static void inet_del_ifa(struct in_devic promote->ifa_flags &= ~IFA_F_SECONDARY; rtmsg_ifa(RTM_NEWADDR, promote); - notifier_call_chain(&inetaddr_chain, NETDEV_UP, promote); + blocking_notifier_call_chain(&inetaddr_chain, + NETDEV_UP, promote); for (ifa = promote->ifa_next; ifa; ifa = ifa->ifa_next) { if (ifa1->ifa_mask != ifa->ifa_mask || !inet_ifa_match(ifa1->ifa_address, ifa)) @@ -366,7 +368,7 @@ static int inet_insert_ifa(struct in_ifa Notifier will trigger FIB update, so that listeners of netlink will know about new ifaddr */ rtmsg_ifa(RTM_NEWADDR, ifa); - notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa); + blocking_notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa); return 0; } @@ -938,12 +940,12 @@ u32 inet_confirm_addr(const struct net_d int register_inetaddr_notifier(struct notifier_block *nb) { - return notifier_chain_register(&inetaddr_chain, nb); + return blocking_notifier_chain_register(&inetaddr_chain, nb); } int unregister_inetaddr_notifier(struct notifier_block *nb) { - return notifier_chain_unregister(&inetaddr_chain, nb); + return blocking_notifier_chain_unregister(&inetaddr_chain, nb); } /* Rename ifa_labels for a device name change. Make some effort to preserve existing diff -puN net/ipv4/netfilter/ip_conntrack_core.c~notifier-chain-update-simple-definition-changes net/ipv4/netfilter/ip_conntrack_core.c --- devel/net/ipv4/netfilter/ip_conntrack_core.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/net/ipv4/netfilter/ip_conntrack_core.c 2006-03-16 02:09:11.000000000 -0800 @@ -80,8 +80,8 @@ static int ip_conntrack_vmalloc; static unsigned int ip_conntrack_next_id = 1; static unsigned int ip_conntrack_expect_next_id = 1; #ifdef CONFIG_IP_NF_CONNTRACK_EVENTS -struct notifier_block *ip_conntrack_chain; -struct notifier_block *ip_conntrack_expect_chain; +ATOMIC_NOTIFIER_HEAD(ip_conntrack_chain); +ATOMIC_NOTIFIER_HEAD(ip_conntrack_expect_chain); DEFINE_PER_CPU(struct ip_conntrack_ecache, ip_conntrack_ecache); @@ -92,7 +92,7 @@ __ip_ct_deliver_cached_events(struct ip_ { DEBUGP("ecache: delivering events for %p\n", ecache->ct); if (is_confirmed(ecache->ct) && !is_dying(ecache->ct) && ecache->events) - notifier_call_chain(&ip_conntrack_chain, ecache->events, + atomic_notifier_call_chain(&ip_conntrack_chain, ecache->events, ecache->ct); ecache->events = 0; ip_conntrack_put(ecache->ct); diff -puN net/ipv6/addrconf.c~notifier-chain-update-simple-definition-changes net/ipv6/addrconf.c --- devel/net/ipv6/addrconf.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/net/ipv6/addrconf.c 2006-03-16 02:09:11.000000000 -0800 @@ -143,7 +143,7 @@ static void inet6_prefix_notify(int even struct prefix_info *pinfo); static int ipv6_chk_same_addr(const struct in6_addr *addr, struct net_device *dev); -static struct notifier_block *inet6addr_chain; +static ATOMIC_NOTIFIER_HEAD(inet6addr_chain); struct ipv6_devconf ipv6_devconf = { .forwarding = 0, @@ -595,7 +595,7 @@ out2: read_unlock_bh(&addrconf_lock); if (likely(err == 0)) - notifier_call_chain(&inet6addr_chain, NETDEV_UP, ifa); + atomic_notifier_call_chain(&inet6addr_chain, NETDEV_UP, ifa); else { kfree(ifa); ifa = ERR_PTR(err); @@ -690,7 +690,7 @@ static void ipv6_del_addr(struct inet6_i ipv6_ifa_notify(RTM_DELADDR, ifp); - notifier_call_chain(&inet6addr_chain,NETDEV_DOWN,ifp); + atomic_notifier_call_chain(&inet6addr_chain, NETDEV_DOWN, ifp); addrconf_del_timer(ifp); @@ -3770,12 +3770,12 @@ static void addrconf_sysctl_unregister(s int register_inet6addr_notifier(struct notifier_block *nb) { - return notifier_chain_register(&inet6addr_chain, nb); + return atomic_notifier_chain_register(&inet6addr_chain, nb); } int unregister_inet6addr_notifier(struct notifier_block *nb) { - return notifier_chain_unregister(&inet6addr_chain,nb); + return atomic_notifier_chain_unregister(&inet6addr_chain,nb); } /* diff -puN net/netfilter/nf_conntrack_core.c~notifier-chain-update-simple-definition-changes net/netfilter/nf_conntrack_core.c --- devel/net/netfilter/nf_conntrack_core.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/net/netfilter/nf_conntrack_core.c 2006-03-16 02:09:11.000000000 -0800 @@ -88,8 +88,8 @@ static int nf_conntrack_vmalloc; static unsigned int nf_conntrack_next_id = 1; static unsigned int nf_conntrack_expect_next_id = 1; #ifdef CONFIG_NF_CONNTRACK_EVENTS -struct notifier_block *nf_conntrack_chain; -struct notifier_block *nf_conntrack_expect_chain; +ATOMIC_NOTIFIER_HEAD(nf_conntrack_chain); +ATOMIC_NOTIFIER_HEAD(nf_conntrack_expect_chain); DEFINE_PER_CPU(struct nf_conntrack_ecache, nf_conntrack_ecache); @@ -101,7 +101,7 @@ __nf_ct_deliver_cached_events(struct nf_ DEBUGP("ecache: delivering events for %p\n", ecache->ct); if (nf_ct_is_confirmed(ecache->ct) && !nf_ct_is_dying(ecache->ct) && ecache->events) - notifier_call_chain(&nf_conntrack_chain, ecache->events, + atomic_notifier_call_chain(&nf_conntrack_chain, ecache->events, ecache->ct); ecache->events = 0; diff -puN net/netlink/af_netlink.c~notifier-chain-update-simple-definition-changes net/netlink/af_netlink.c --- devel/net/netlink/af_netlink.c~notifier-chain-update-simple-definition-changes 2006-03-16 02:09:11.000000000 -0800 +++ devel-akpm/net/netlink/af_netlink.c 2006-03-16 02:09:11.000000000 -0800 @@ -123,7 +123,7 @@ static void netlink_destroy_callback(str static DEFINE_RWLOCK(nl_table_lock); static atomic_t nl_table_users = ATOMIC_INIT(0); -static struct notifier_block *netlink_chain; +static ATOMIC_NOTIFIER_HEAD(netlink_chain); static u32 netlink_group_mask(u32 group) { @@ -469,7 +469,8 @@ static int netlink_release(struct socket .protocol = sk->sk_protocol, .pid = nlk->pid, }; - notifier_call_chain(&netlink_chain, NETLINK_URELEASE, &n); + atomic_notifier_call_chain(&netlink_chain, + NETLINK_URELEASE, &n); } if (nlk->module) @@ -1695,12 +1696,12 @@ static struct file_operations netlink_se int netlink_register_notifier(struct notifier_block *nb) { - return notifier_chain_register(&netlink_chain, nb); + return atomic_notifier_chain_register(&netlink_chain, nb); } int netlink_unregister_notifier(struct notifier_block *nb) { - return notifier_chain_unregister(&netlink_chain, nb); + return atomic_notifier_chain_unregister(&netlink_chain, nb); } static const struct proto_ops netlink_ops = { _