Whamcloud - gitweb
LU-14080 gnilnd: updates for SUSE 15 SP2 26/40426/3
authorShaun Tancheff <shaun.tancheff@hpe.com>
Tue, 27 Oct 2020 21:03:13 +0000 (16:03 -0500)
committerOleg Drokin <green@whamcloud.com>
Thu, 17 Dec 2020 17:00:58 +0000 (17:00 +0000)
gnilnd updates for SUSE 15 SP2

Use -Werror when checking for -Wno-stringop-truncation to
ensure the compile test is valid

Adjust for kernel dropping time_t, timeval, timespec
Adjust for kernel switching to timer_setup

Adjust for kernel dropping global_page_state(), use
nr_free_pages instead

Cleanup string format for stricter checking

Test-Parameters: trivial
HPE-bug-id: LUS-9453
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I5dcda1497fa5b1f2cf4a215517700f07374fcf7f
Reviewed-on: https://review.whamcloud.com/40426
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Petros Koutoupis <petros.koutoupis@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
config/lustre-build.m4
lnet/klnds/gnilnd/gnilnd.c
lnet/klnds/gnilnd/gnilnd.h
lnet/klnds/gnilnd/gnilnd_cb.c
lnet/klnds/gnilnd/gnilnd_conn.c
lnet/klnds/gnilnd/gnilnd_proc.c
lnet/klnds/gnilnd/gnilnd_sysctl.c

index e6219eb..4d089bd 100644 (file)
@@ -386,7 +386,7 @@ AC_DEFUN([LB_CC_NO_STRINGOP_TRUNCATION], [
        AC_MSG_CHECKING([for -Wno-stringop-truncation support])
 
        saved_flags="$CFLAGS"
-       CFLAGS="$CFLAGS -Wno-stringop-truncation"
+       CFLAGS="$CFLAGS -Werror -Wno-stringop-truncation"
 
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
                EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-truncation"
index 2548fde..84fc55c 100644 (file)
@@ -2053,9 +2053,10 @@ kgnilnd_dev_fini(kgn_device_t *dev)
        LASSERTF(atomic_read(&dev->gnd_n_mdd) == 0 &&
                 atomic_read(&dev->gnd_n_mdd_held) == 0 &&
                 atomic64_read(&dev->gnd_nbytes_map) == 0,
-               "%d SMSG mappings of %ld bytes still mapped or held %d\n",
+                "%d SMSG mappings of %lld bytes still mapped or held %d\n",
                 atomic_read(&dev->gnd_n_mdd),
-                atomic64_read(&dev->gnd_nbytes_map), atomic_read(&dev->gnd_n_mdd_held));
+                (u64)atomic64_read(&dev->gnd_nbytes_map),
+                atomic_read(&dev->gnd_n_mdd_held));
 
        LASSERT(list_empty(&dev->gnd_map_list));
 
@@ -2116,7 +2117,7 @@ kgnilnd_dev_fini(kgn_device_t *dev)
 
 int kgnilnd_base_startup(void)
 {
-       struct timeval       tv;
+       struct timespec64    ts;
        long long            pkmem = libcfs_kmem_read();
        int                  rc;
        int                  i;
@@ -2146,10 +2147,10 @@ int kgnilnd_base_startup(void)
         * initialised with seconds + microseconds at startup time.  So we
         * rely on NOT creating connections more frequently on average than
         * 1MHz to ensure we don't use old connstamps when we reboot. */
-       do_gettimeofday(&tv);
+       ktime_get_ts64(&ts);
        kgnilnd_data.kgn_connstamp =
                 kgnilnd_data.kgn_peerstamp =
-                       (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec;
+                       (ts.tv_sec * 1000000) + (ts.tv_nsec / 100);
 
        init_rwsem(&kgnilnd_data.kgn_net_rw_sem);
 
@@ -2194,12 +2195,14 @@ int kgnilnd_base_startup(void)
                atomic_set(&dev->gnd_ndgrams, 0);
                atomic_set(&dev->gnd_nwcdgrams, 0);
                /* setup timer for RDMAQ processing */
-               setup_timer(&dev->gnd_rdmaq_timer, kgnilnd_schedule_device_timer,
-                           (unsigned long)dev);
+               cfs_timer_setup(&dev->gnd_rdmaq_timer,
+                               kgnilnd_schedule_device_timer,
+                               (unsigned long)dev, 0);
 
                /* setup timer for mapping processing */
-               setup_timer(&dev->gnd_map_timer, kgnilnd_schedule_device_timer,
-                           (unsigned long)dev);
+               cfs_timer_setup(&dev->gnd_map_timer,
+                               kgnilnd_schedule_device_timer,
+                               (unsigned long)dev, 0);
 
        }
 
index 92d4515..571f9b9 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _GNILND_GNILND_H_
 #define _GNILND_GNILND_H_
 
+#define DEBUG_SUBSYSTEM S_LND
+
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -59,8 +61,6 @@
 #include <linux/in.h>
 #include <linux/nmi.h>
 
-#define DEBUG_SUBSYSTEM S_LND
-
 #include <lnet/lib-lnet.h>
 
 #include <gni_pub.h>
@@ -808,7 +808,7 @@ typedef struct kgn_rx {
        kgn_msg_t               *grx_msg;       /* message */
        struct lnet_msg              *grx_lntmsg;    /* lnet msg for this rx (eager only) */
        int                      grx_eager;     /* if eager, we copied msg to somewhere */
-       struct timespec          grx_received;  /* time this msg received */
+       struct timespec64        grx_received;  /* time this msg received */
 } kgn_rx_t;
 
 typedef struct kgn_data {
@@ -1821,7 +1821,8 @@ void kgnilnd_consume_rx(kgn_rx_t *rx);
 
 void kgnilnd_schedule_device(kgn_device_t *dev);
 void kgnilnd_device_callback(__u32 devid, __u64 arg);
-void kgnilnd_schedule_device_timer(unsigned long arg);
+void kgnilnd_schedule_device_timer(cfs_timer_cb_arg_t data);
+void kgnilnd_schedule_device_timer_rd(cfs_timer_cb_arg_t data);
 
 int kgnilnd_reaper(void *arg);
 int kgnilnd_scheduler(void *arg);
index b1e9c25..5f838b1 100644 (file)
@@ -87,9 +87,16 @@ kgnilnd_schedule_device(kgn_device_t *dev)
        }
 }
 
-void kgnilnd_schedule_device_timer(unsigned long arg)
+void kgnilnd_schedule_device_timer(cfs_timer_cb_arg_t data)
 {
-       kgn_device_t *dev = (kgn_device_t *) arg;
+       kgn_device_t *dev = cfs_from_timer(dev, data, gnd_map_timer);
+
+       kgnilnd_schedule_device(dev);
+}
+
+void kgnilnd_schedule_device_timer_rd(cfs_timer_cb_arg_t data)
+{
+       kgn_device_t *dev = cfs_from_timer(dev, data, gnd_rdmaq_timer);
 
        kgnilnd_schedule_device(dev);
 }
@@ -869,7 +876,7 @@ kgnilnd_verify_rdma_cksum(kgn_tx_t *tx, __u16 rx_cksum, int put_len)
                                kgnilnd_dump_blob(D_BUFFS, "RDMA payload",
                                                  tx->tx_buffer, nob);
                        }
-                       /* fall through to dump log */
+                       /* fallthrough */
                case 1:
                        libcfs_debug_dumplog();
                        break;
@@ -953,9 +960,10 @@ kgnilnd_mem_del_map_list(kgn_device_t *dev, kgn_tx_t *tx)
            tx->tx_msg.gnm_type == GNILND_MSG_GET_REQ) {
                atomic64_sub(bytes, &dev->gnd_rdmaq_bytes_out);
                LASSERTF(atomic64_read(&dev->gnd_rdmaq_bytes_out) >= 0,
-                        "bytes_out negative! %ld\n", atomic64_read(&dev->gnd_rdmaq_bytes_out));
+                        "bytes_out negative! %lld\n",
+                        (s64)atomic64_read(&dev->gnd_rdmaq_bytes_out));
                GNIDBG_TX(D_NETTRACE, tx, "rdma -- %d to %lld",
-                         bytes, atomic64_read(&dev->gnd_rdmaq_bytes_out));
+                         bytes, (s64)atomic64_read(&dev->gnd_rdmaq_bytes_out));
        }
 
        atomic_dec(&dev->gnd_n_mdd);
@@ -1654,7 +1662,8 @@ kgnilnd_queue_tx(kgn_conn_t *conn, kgn_tx_t *tx)
                        /* it was sent, break out of switch to avoid default case of queueing */
                        break;
                }
-               /* needs to queue to try again, so fall through to default case */
+               /* needs to queue to try again, so... */
+               /* fall through... */
        case GNILND_MSG_NOOP:
                /* Just make sure this goes out first for this conn */
                add_tail = 0;
@@ -2394,7 +2403,7 @@ kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                                case 2:
                                        kgnilnd_dump_blob(D_BUFFS, "bad payload checksum",
                                                          &rxmsg[1], rxmsg->gnm_payload_len);
-                                       /* fall through to dump */
+                                       /* fallthrough */
                                case 1:
                                        libcfs_debug_dumplog();
                                        break;
@@ -2908,7 +2917,7 @@ kgnilnd_update_reaper_timeout(long timeout)
 }
 
 static void
-kgnilnd_reaper_poke_with_stick(unsigned long arg)
+kgnilnd_reaper_poke_with_stick(cfs_timer_cb_arg_t arg)
 {
        wake_up(&kgnilnd_data.kgn_reaper_waitq);
 }
@@ -2951,8 +2960,8 @@ kgnilnd_reaper(void *arg)
                        prepare_to_wait(&kgnilnd_data.kgn_reaper_waitq, &wait,
                                        TASK_INTERRUPTIBLE);
                        spin_unlock(&kgnilnd_data.kgn_reaper_lock);
-                       setup_timer(&timer, kgnilnd_reaper_poke_with_stick,
-                                   next_check_time);
+                       cfs_timer_setup(&timer, kgnilnd_reaper_poke_with_stick,
+                                       next_check_time, 0);
                        mod_timer(&timer, (long) jiffies + timeout);
 
                        /* check flag variables before committing */
@@ -3729,7 +3738,7 @@ kgnilnd_process_fmaq(kgn_conn_t *conn)
        case GNILND_MSG_PUT_REQ:
        case GNILND_MSG_GET_REQ_REV:
                tx->tx_msg.gnm_u.putreq.gnprm_cookie = tx->tx_id.txe_cookie;
-
+               /* fallthrough */
        case GNILND_MSG_PUT_ACK:
        case GNILND_MSG_PUT_REQ_REV:
        case GNILND_MSG_GET_ACK_REV:
@@ -3809,10 +3818,9 @@ kgnilnd_process_rdmaq(kgn_device_t *dev)
                        new_ok -= atomic64_read(&dev->gnd_rdmaq_bytes_out);
                        atomic64_set(&dev->gnd_rdmaq_bytes_ok, new_ok);
 
-                       CDEBUG(D_NET, "resetting rdmaq bytes to %ld, deadline +%lu -> %lu, "
-                                      "current out %ld\n",
-                              atomic64_read(&dev->gnd_rdmaq_bytes_ok), dead_bump, dev->gnd_rdmaq_deadline,
-                              atomic64_read(&dev->gnd_rdmaq_bytes_out));
+                       CDEBUG(D_NET, "resetting rdmaq bytes to %lld, deadline +%lu -> %lu, current out %lld\n",
+                              (s64)atomic64_read(&dev->gnd_rdmaq_bytes_ok), dead_bump, dev->gnd_rdmaq_deadline,
+                              (s64)atomic64_read(&dev->gnd_rdmaq_bytes_out));
                }
                spin_unlock(&dev->gnd_rdmaq_lock);
        }
@@ -4103,7 +4111,7 @@ kgnilnd_check_fma_rx(kgn_conn_t *conn)
        rx->grx_msg = msg;
        rx->grx_conn = conn;
        rx->grx_eager = 0;
-       rx->grx_received = current_kernel_time();
+       ktime_get_ts64(&rx->grx_received);
 
        if (CFS_FAIL_CHECK(CFS_FAIL_GNI_NET_LOOKUP)) {
                rc = -ENONET;
index 12d16a3..dab5633 100644 (file)
@@ -24,6 +24,7 @@
  */
 
 #include "gnilnd.h"
+#include <linux/swap.h>
 
 void
 kgnilnd_setup_smsg_attr(gni_smsg_attr_t *smsg_attr)
@@ -101,11 +102,11 @@ kgnilnd_alloc_fmablk(kgn_device_t *device, int use_phys)
         * to memory exhaustion during massive reconnects during a network
         * outage. Limit the amount of fma blocks to use by always keeping
         * a percent of pages free initially set to 25% of total memory. */
-       if (global_page_state(NR_FREE_PAGES) < kgnilnd_data.free_pages_limit) {
+       if (nr_free_pages() < kgnilnd_data.free_pages_limit) {
                LCONSOLE_INFO("Exceeding free page limit of %ld. "
                              "Free pages available %ld\n",
                              kgnilnd_data.free_pages_limit,
-                             global_page_state(NR_FREE_PAGES));
+                             nr_free_pages());
                return -ENOMEM;
        }
 #endif
@@ -2428,13 +2429,17 @@ kgnilnd_repost_wc_dgrams(kgn_device_t *dev)
        RETURN(did_something);
 }
 
+struct kgnilnd_dgram_timer {
+       struct timer_list timer;
+       kgn_device_t *dev;
+};
+
 static void
-kgnilnd_dgram_poke_with_stick(unsigned long arg)
+kgnilnd_dgram_poke_with_stick(cfs_timer_cb_arg_t arg)
 {
-       int             dev_id = arg;
-       kgn_device_t    *dev = &kgnilnd_data.kgn_devices[dev_id];
+       struct kgnilnd_dgram_timer *t = cfs_from_timer(t, arg, timer);
 
-       wake_up(&dev->gnd_dgram_waitq);
+       wake_up(&t->dev->gnd_dgram_waitq);
 }
 
 /* use single thread for dgrams - should be sufficient for performance */
@@ -2446,8 +2451,8 @@ kgnilnd_dgram_mover(void *arg)
        int                      rc, did_something;
        unsigned long            next_purge_check = jiffies - 1;
        unsigned long            timeout;
-       struct timer_list        timer;
-       unsigned long            deadline = 0;
+       struct kgnilnd_dgram_timer timer;
+       unsigned long deadline = 0;
        DEFINE_WAIT(wait);
 
        snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
@@ -2515,8 +2520,11 @@ kgnilnd_dgram_mover(void *arg)
 
                prepare_to_wait(&dev->gnd_dgram_waitq, &wait, TASK_INTERRUPTIBLE);
 
-               setup_timer(&timer, kgnilnd_dgram_poke_with_stick, dev->gnd_id);
-               mod_timer(&timer, (long) jiffies + timeout);
+               cfs_timer_setup(&timer.timer,
+                               kgnilnd_dgram_poke_with_stick,
+                               dev, 0);
+               timer.dev = dev;
+               mod_timer(&timer.timer, (long) jiffies + timeout);
 
                /* last second chance for others to poke us */
                did_something += xchg(&dev->gnd_dgram_ready, GNILND_DGRAM_IDLE);
@@ -2535,7 +2543,7 @@ kgnilnd_dgram_mover(void *arg)
                        deadline = jiffies + cfs_time_seconds(*kgnilnd_tunables.kgn_dgram_timeout);
                }
 
-               del_singleshot_timer_sync(&timer);
+               del_singleshot_timer_sync(&timer.timer);
                finish_wait(&dev->gnd_dgram_waitq, &wait);
        }
 
index 13fb4a5..dfb01f5 100644 (file)
@@ -207,7 +207,7 @@ static int
 kgnilnd_stats_seq_show(struct seq_file *sf, void *v)
 {
        kgn_device_t           *dev;
-       struct timeval          now;
+       struct timespec64 now;
 
        if (kgnilnd_data.kgn_init < GNILND_INIT_ALL) {
                seq_printf(sf, "kgnilnd is not initialized yet\n");
@@ -219,9 +219,9 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v)
 
        /* sampling is racy, but so is reading this file! */
        smp_rmb();
-       do_gettimeofday(&now);
+       ktime_get_ts64(&now);
 
-       seq_printf(sf, "time: %lu.%lu\n"
+       seq_printf(sf, "time: %llu.%lu\n"
                   "ntx: %d\n"
                   "npeers: %d\n"
                   "nconns: %d\n"
@@ -231,12 +231,12 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v)
                   "n_mdd: %d\n"
                   "n_mdd_held: %d\n"
                   "n_eager_allocs: %d\n"
-                  "GART map bytes: %ld\n"
+                  "GART map bytes: %lld\n"
                   "TX queued maps: %d\n"
                   "TX phys nmaps: %d\n"
                   "TX phys bytes: %lu\n"
-                  "RDMAQ bytes_auth: %ld\n"
-                  "RDMAQ bytes_left: %ld\n"
+                  "RDMAQ bytes_auth: %lld\n"
+                  "RDMAQ bytes_left: %lld\n"
                   "RDMAQ nstalls: %d\n"
                   "dev mutex delay: %ld\n"
                   "dev n_yield: %d\n"
@@ -245,20 +245,20 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v)
                   "SMSG fast_ok: %d\n"
                   "SMSG fast_block: %d\n"
                   "SMSG ntx: %u\n"
-                  "SMSG tx_bytes: %lu\n"
+                  "SMSG tx_bytes: %llu\n"
                   "SMSG nrx: %u\n"
-                  "SMSG rx_bytes: %lu\n"
+                  "SMSG rx_bytes: %llu\n"
                   "RDMA ntx: %u\n"
-                  "RDMA tx_bytes: %lu\n"
+                  "RDMA tx_bytes: %llu\n"
                   "RDMA nrx: %u\n"
-                  "RDMA rx_bytes: %lu\n"
+                  "RDMA rx_bytes: %llu\n"
                   "VMAP short: %d\n"
                   "VMAP cksum: %d\n"
                   "KMAP short: %d\n"
                   "RDMA REV length: %d\n"
                   "RDMA REV offset: %d\n"
                   "RDMA REV copy: %d\n",
-                  now.tv_sec, now.tv_usec,
+                  (s64)now.tv_sec, now.tv_nsec,
                   atomic_read(&kgnilnd_data.kgn_ntx),
                   atomic_read(&kgnilnd_data.kgn_npeers),
                   atomic_read(&kgnilnd_data.kgn_nconns),
@@ -267,11 +267,11 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v)
                   atomic_read(&dev->gnd_nfmablk),
                   atomic_read(&dev->gnd_n_mdd), atomic_read(&dev->gnd_n_mdd_held),
                   atomic_read(&kgnilnd_data.kgn_neager_allocs),
-                  atomic64_read(&dev->gnd_nbytes_map),
+                  (s64)atomic64_read(&dev->gnd_nbytes_map),
                   atomic_read(&dev->gnd_nq_map),
                   dev->gnd_map_nphys, dev->gnd_map_physnop * PAGE_SIZE,
-                  atomic64_read(&dev->gnd_rdmaq_bytes_out),
-                  atomic64_read(&dev->gnd_rdmaq_bytes_ok),
+                  (s64)atomic64_read(&dev->gnd_rdmaq_bytes_out),
+                  (s64)atomic64_read(&dev->gnd_rdmaq_bytes_ok),
                   atomic_read(&dev->gnd_rdmaq_nstalls),
                   dev->gnd_mutex_delay,
                   atomic_read(&dev->gnd_n_yield),
@@ -280,13 +280,13 @@ kgnilnd_stats_seq_show(struct seq_file *sf, void *v)
                   atomic_read(&dev->gnd_fast_ok),
                   atomic_read(&dev->gnd_fast_block),
                   atomic_read(&dev->gnd_short_ntx),
-                  atomic64_read(&dev->gnd_short_txbytes),
+                  (s64)atomic64_read(&dev->gnd_short_txbytes),
                   atomic_read(&dev->gnd_short_nrx),
-                  atomic64_read(&dev->gnd_short_rxbytes),
+                  (s64)atomic64_read(&dev->gnd_short_rxbytes),
                   atomic_read(&dev->gnd_rdma_ntx),
-                  atomic64_read(&dev->gnd_rdma_txbytes),
+                  (s64)atomic64_read(&dev->gnd_rdma_txbytes),
                   atomic_read(&dev->gnd_rdma_nrx),
-                  atomic64_read(&dev->gnd_rdma_rxbytes),
+                  (s64)atomic64_read(&dev->gnd_rdma_rxbytes),
                   atomic_read(&kgnilnd_data.kgn_nvmap_short),
                   atomic_read(&kgnilnd_data.kgn_nvmap_cksum),
                   atomic_read(&kgnilnd_data.kgn_nkmap_short),
@@ -1007,7 +1007,7 @@ kgnilnd_proc_peer_conns_seq_show(struct seq_file *sf, void *v)
         * 2012-12-11T16:06:16.966751 123@gni ...
         */
        getnstimeofday(&now);
-       time_to_tm(now.tv_sec, 0, &ctm);
+       time64_to_tm(now.tv_sec, 0, &ctm);
        jifs = jiffies;
 
        write_lock(&kgnilnd_data.kgn_peer_conn_lock);
index 4b472f1..c95f8d6 100644 (file)
@@ -276,7 +276,7 @@ static struct ctl_table kgnilnd_table[] = {
                .mode     = 0644,
                .proc_handler = &proc_peer_state,
        },
-       { 0 }
+       { .procname = NULL }
 };
 
 static struct ctl_table kgnilnd_top_table[2] = {
@@ -287,7 +287,7 @@ static struct ctl_table kgnilnd_top_table[2] = {
                .mode     = 0555,
                .child    = kgnilnd_table
        },
-       { 0 }
+       { .procname = NULL }
 };
 
 void kgnilnd_insert_sysctl(void)