relayfs: Convert to hotplug state machine
[sfrench/cifs-2.6.git] / kernel / relay.c
index ed157378f6cbf115b0e085771310851fd97e9aec..fc9b4a4af463a61732e185cceda2afffc827fd6e 100644 (file)
@@ -513,48 +513,25 @@ static void setup_callbacks(struct rchan *chan,
        chan->cb = cb;
 }
 
-/**
- *     relay_hotcpu_callback - CPU hotplug callback
- *     @nb: notifier block
- *     @action: hotplug action to take
- *     @hcpu: CPU number
- *
- *     Returns the success/failure of the operation. (%NOTIFY_OK, %NOTIFY_BAD)
- */
-static int relay_hotcpu_callback(struct notifier_block *nb,
-                               unsigned long action,
-                               void *hcpu)
+int relay_prepare_cpu(unsigned int cpu)
 {
-       unsigned int hotcpu = (unsigned long)hcpu;
        struct rchan *chan;
        struct rchan_buf *buf;
 
-       switch(action) {
-       case CPU_UP_PREPARE:
-       case CPU_UP_PREPARE_FROZEN:
-               mutex_lock(&relay_channels_mutex);
-               list_for_each_entry(chan, &relay_channels, list) {
-                       if ((buf = *per_cpu_ptr(chan->buf, hotcpu)))
-                               continue;
-                       buf = relay_open_buf(chan, hotcpu);
-                       if (!buf) {
-                               printk(KERN_ERR
-                                       "relay_hotcpu_callback: cpu %d buffer "
-                                       "creation failed\n", hotcpu);
-                               mutex_unlock(&relay_channels_mutex);
-                               return notifier_from_errno(-ENOMEM);
-                       }
-                       *per_cpu_ptr(chan->buf, hotcpu) = buf;
+       mutex_lock(&relay_channels_mutex);
+       list_for_each_entry(chan, &relay_channels, list) {
+               if ((buf = *per_cpu_ptr(chan->buf, cpu)))
+                       continue;
+               buf = relay_open_buf(chan, cpu);
+               if (!buf) {
+                       pr_err("relay: cpu %d buffer creation failed\n", cpu);
+                       mutex_unlock(&relay_channels_mutex);
+                       return -ENOMEM;
                }
-               mutex_unlock(&relay_channels_mutex);
-               break;
-       case CPU_DEAD:
-       case CPU_DEAD_FROZEN:
-               /* No need to flush the cpu : will be flushed upon
-                * final relay_flush() call. */
-               break;
+               *per_cpu_ptr(chan->buf, cpu) = buf;
        }
-       return NOTIFY_OK;
+       mutex_unlock(&relay_channels_mutex);
+       return 0;
 }
 
 /**
@@ -1387,12 +1364,3 @@ const struct file_operations relay_file_operations = {
        .splice_read    = relay_file_splice_read,
 };
 EXPORT_SYMBOL_GPL(relay_file_operations);
-
-static __init int relay_init(void)
-{
-
-       hotcpu_notifier(relay_hotcpu_callback, 0);
-       return 0;
-}
-
-early_initcall(relay_init);