#endif
 
 /*
- * This array holds the first and last local port number.
+ * This struct holds the first and last local port number.
  */
-int sysctl_local_port_range[2] = { 32768, 61000 };
-DEFINE_SEQLOCK(sysctl_port_range_lock);
+struct local_ports sysctl_local_ports __read_mostly = {
+       .lock = SEQLOCK_UNLOCKED,
+       .range = { 32768, 61000 },
+};
 
 void inet_get_local_port_range(int *low, int *high)
 {
        unsigned seq;
        do {
-               seq = read_seqbegin(&sysctl_port_range_lock);
+               seq = read_seqbegin(&sysctl_local_ports.lock);
 
-               *low = sysctl_local_port_range[0];
-               *high = sysctl_local_port_range[1];
-       } while (read_seqretry(&sysctl_port_range_lock, seq));
+               *low = sysctl_local_ports.range[0];
+               *high = sysctl_local_ports.range[1];
+       } while (read_seqretry(&sysctl_local_ports.lock, seq));
 }
 EXPORT_SYMBOL(inet_get_local_port_range);
 
 
 static int ip_local_port_range_min[] = { 1, 1 };
 static int ip_local_port_range_max[] = { 65535, 65535 };
 
-extern seqlock_t sysctl_port_range_lock;
-extern int sysctl_local_port_range[2];
-
 /* Update system visible IP port range */
 static void set_local_port_range(int range[2])
 {
-       write_seqlock(&sysctl_port_range_lock);
-       sysctl_local_port_range[0] = range[0];
-       sysctl_local_port_range[1] = range[1];
-       write_sequnlock(&sysctl_port_range_lock);
+       write_seqlock(&sysctl_local_ports.lock);
+       sysctl_local_ports.range[0] = range[0];
+       sysctl_local_ports.range[1] = range[1];
+       write_sequnlock(&sysctl_local_ports.lock);
 }
 
 /* Validate changes from /proc interface. */
                                 size_t *lenp, loff_t *ppos)
 {
        int ret;
-       int range[2] = { sysctl_local_port_range[0],
-                        sysctl_local_port_range[1] };
+       int range[2];
        ctl_table tmp = {
                .data = &range,
                .maxlen = sizeof(range),
                .extra2 = &ip_local_port_range_max,
        };
 
+       inet_get_local_port_range(range, range + 1);
        ret = proc_dointvec_minmax(&tmp, write, filp, buffer, lenp, ppos);
 
        if (write && ret == 0) {
                                        void __user *newval, size_t newlen)
 {
        int ret;
-       int range[2] = { sysctl_local_port_range[0],
-                        sysctl_local_port_range[1] };
+       int range[2];
        ctl_table tmp = {
                .data = &range,
                .maxlen = sizeof(range),
                .extra2 = &ip_local_port_range_max,
        };
 
+       inet_get_local_port_range(range, range + 1);
        ret = sysctl_intvec(&tmp, name, nlen, oldval, oldlenp, newval, newlen);
        if (ret == 0 && newval && newlen) {
                if (range[1] < range[0])
        {
                .ctl_name       = NET_IPV4_LOCAL_PORT_RANGE,
                .procname       = "ip_local_port_range",
-               .data           = &sysctl_local_port_range,
-               .maxlen         = sizeof(sysctl_local_port_range),
+               .data           = &sysctl_local_ports.range,
+               .maxlen         = sizeof(sysctl_local_ports.range),
                .mode           = 0644,
                .proc_handler   = &ipv4_local_port_range,
                .strategy       = &ipv4_sysctl_local_port_range,