mmc: dw_mmc: fix unmap sg twice when finding data err
[firefly-linux-kernel-4.4.55.git] / ipc / ipc_sysctl.c
index a0f0ab2ac2a8b92961c229dde22703dc7107cf3e..8ad93c29f511033dc4a6df1b2a26398ea78c9104 100644 (file)
@@ -18,7 +18,7 @@
 #include <linux/msg.h>
 #include "util.h"
 
-static void *get_ipc(ctl_table *table)
+static void *get_ipc(struct ctl_table *table)
 {
        char *which = table->data;
        struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
@@ -27,7 +27,7 @@ static void *get_ipc(ctl_table *table)
 }
 
 #ifdef CONFIG_PROC_SYSCTL
-static int proc_ipc_dointvec(ctl_table *table, int write,
+static int proc_ipc_dointvec(struct ctl_table *table, int write,
        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        struct ctl_table ipc_table;
@@ -38,7 +38,7 @@ static int proc_ipc_dointvec(ctl_table *table, int write,
        return proc_dointvec(&ipc_table, write, buffer, lenp, ppos);
 }
 
-static int proc_ipc_dointvec_minmax(ctl_table *table, int write,
+static int proc_ipc_dointvec_minmax(struct ctl_table *table, int write,
        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        struct ctl_table ipc_table;
@@ -49,7 +49,7 @@ static int proc_ipc_dointvec_minmax(ctl_table *table, int write,
        return proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos);
 }
 
-static int proc_ipc_dointvec_minmax_orphans(ctl_table *table, int write,
+static int proc_ipc_dointvec_minmax_orphans(struct ctl_table *table, int write,
        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        struct ipc_namespace *ns = current->nsproxy->ipc_ns;
@@ -62,30 +62,7 @@ static int proc_ipc_dointvec_minmax_orphans(ctl_table *table, int write,
        return err;
 }
 
-static int proc_ipc_callback_dointvec_minmax(ctl_table *table, int write,
-       void __user *buffer, size_t *lenp, loff_t *ppos)
-{
-       struct ctl_table ipc_table;
-       size_t lenp_bef = *lenp;
-       int rc;
-
-       memcpy(&ipc_table, table, sizeof(ipc_table));
-       ipc_table.data = get_ipc(table);
-
-       rc = proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos);
-
-       if (write && !rc && lenp_bef == *lenp)
-               /*
-                * Tunable has successfully been changed by hand. Disable its
-                * automatic adjustment. This simply requires unregistering
-                * the notifiers that trigger recalculation.
-                */
-               unregister_ipcns_notifier(current->nsproxy->ipc_ns);
-
-       return rc;
-}
-
-static int proc_ipc_doulongvec_minmax(ctl_table *table, int write,
+static int proc_ipc_doulongvec_minmax(struct ctl_table *table, int write,
        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        struct ctl_table ipc_table;
@@ -96,54 +73,19 @@ static int proc_ipc_doulongvec_minmax(ctl_table *table, int write,
                                        lenp, ppos);
 }
 
-/*
- * Routine that is called when the file "auto_msgmni" has successfully been
- * written.
- * Two values are allowed:
- * 0: unregister msgmni's callback routine from the ipc namespace notifier
- *    chain. This means that msgmni won't be recomputed anymore upon memory
- *    add/remove or ipc namespace creation/removal.
- * 1: register back the callback routine.
- */
-static void ipc_auto_callback(int val)
-{
-       if (!val)
-               unregister_ipcns_notifier(current->nsproxy->ipc_ns);
-       else {
-               /*
-                * Re-enable automatic recomputing only if not already
-                * enabled.
-                */
-               recompute_msgmni(current->nsproxy->ipc_ns);
-               cond_register_ipcns_notifier(current->nsproxy->ipc_ns);
-       }
-}
-
-static int proc_ipcauto_dointvec_minmax(ctl_table *table, int write,
+static int proc_ipc_auto_msgmni(struct ctl_table *table, int write,
        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        struct ctl_table ipc_table;
-       int oldval;
-       int rc;
+       int dummy = 0;
 
        memcpy(&ipc_table, table, sizeof(ipc_table));
-       ipc_table.data = get_ipc(table);
-       oldval = *((int *)(ipc_table.data));
+       ipc_table.data = &dummy;
 
-       rc = proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos);
+       if (write)
+               pr_info_once("writing to auto_msgmni has no effect");
 
-       if (write && !rc) {
-               int newval = *((int *)(ipc_table.data));
-               /*
-                * The file "auto_msgmni" has correctly been set.
-                * React by (un)registering the corresponding tunable, if the
-                * value has changed.
-                */
-               if (newval != oldval)
-                       ipc_auto_callback(newval);
-       }
-
-       return rc;
+       return proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos);
 }
 
 #else
@@ -151,8 +93,7 @@ static int proc_ipcauto_dointvec_minmax(ctl_table *table, int write,
 #define proc_ipc_dointvec         NULL
 #define proc_ipc_dointvec_minmax   NULL
 #define proc_ipc_dointvec_minmax_orphans   NULL
-#define proc_ipc_callback_dointvec_minmax  NULL
-#define proc_ipcauto_dointvec_minmax NULL
+#define proc_ipc_auto_msgmni      NULL
 #endif
 
 static int zero;
@@ -163,21 +104,21 @@ static struct ctl_table ipc_kern_table[] = {
        {
                .procname       = "shmmax",
                .data           = &init_ipc_ns.shm_ctlmax,
-               .maxlen         = sizeof (init_ipc_ns.shm_ctlmax),
+               .maxlen         = sizeof(init_ipc_ns.shm_ctlmax),
                .mode           = 0644,
                .proc_handler   = proc_ipc_doulongvec_minmax,
        },
        {
                .procname       = "shmall",
                .data           = &init_ipc_ns.shm_ctlall,
-               .maxlen         = sizeof (init_ipc_ns.shm_ctlall),
+               .maxlen         = sizeof(init_ipc_ns.shm_ctlall),
                .mode           = 0644,
                .proc_handler   = proc_ipc_doulongvec_minmax,
        },
        {
                .procname       = "shmmni",
                .data           = &init_ipc_ns.shm_ctlmni,
-               .maxlen         = sizeof (init_ipc_ns.shm_ctlmni),
+               .maxlen         = sizeof(init_ipc_ns.shm_ctlmni),
                .mode           = 0644,
                .proc_handler   = proc_ipc_dointvec,
        },
@@ -193,7 +134,7 @@ static struct ctl_table ipc_kern_table[] = {
        {
                .procname       = "msgmax",
                .data           = &init_ipc_ns.msg_ctlmax,
-               .maxlen         = sizeof (init_ipc_ns.msg_ctlmax),
+               .maxlen         = sizeof(init_ipc_ns.msg_ctlmax),
                .mode           = 0644,
                .proc_handler   = proc_ipc_dointvec_minmax,
                .extra1         = &zero,
@@ -202,16 +143,25 @@ static struct ctl_table ipc_kern_table[] = {
        {
                .procname       = "msgmni",
                .data           = &init_ipc_ns.msg_ctlmni,
-               .maxlen         = sizeof (init_ipc_ns.msg_ctlmni),
+               .maxlen         = sizeof(init_ipc_ns.msg_ctlmni),
                .mode           = 0644,
-               .proc_handler   = proc_ipc_callback_dointvec_minmax,
+               .proc_handler   = proc_ipc_dointvec_minmax,
                .extra1         = &zero,
                .extra2         = &int_max,
        },
+       {
+               .procname       = "auto_msgmni",
+               .data           = NULL,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_ipc_auto_msgmni,
+               .extra1         = &zero,
+               .extra2         = &one,
+       },
        {
                .procname       =  "msgmnb",
                .data           = &init_ipc_ns.msg_ctlmnb,
-               .maxlen         = sizeof (init_ipc_ns.msg_ctlmnb),
+               .maxlen         = sizeof(init_ipc_ns.msg_ctlmnb),
                .mode           = 0644,
                .proc_handler   = proc_ipc_dointvec_minmax,
                .extra1         = &zero,
@@ -220,19 +170,10 @@ static struct ctl_table ipc_kern_table[] = {
        {
                .procname       = "sem",
                .data           = &init_ipc_ns.sem_ctls,
-               .maxlen         = 4*sizeof (int),
+               .maxlen         = 4*sizeof(int),
                .mode           = 0644,
                .proc_handler   = proc_ipc_dointvec,
        },
-       {
-               .procname       = "auto_msgmni",
-               .data           = &init_ipc_ns.auto_msgmni,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_ipcauto_dointvec_minmax,
-               .extra1         = &zero,
-               .extra2         = &one,
-       },
 #ifdef CONFIG_CHECKPOINT_RESTORE
        {
                .procname       = "sem_next_id",
@@ -280,4 +221,4 @@ static int __init ipc_sysctl_init(void)
        return 0;
 }
 
-__initcall(ipc_sysctl_init);
+device_initcall(ipc_sysctl_init);