X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Finclude%2Flnet%2Flib-types.h;h=9150b7401bc7605c24dcbf69e7b9235ae01639e5;hp=3b1e46f13234c7a19a01b6cb7fb3a91ea6da4cd9;hb=47cc77462343533b4d706836e7e087f7a1844318;hpb=b77281bfd01367d29766496a8d511e3c7a189af2 diff --git a/lnet/include/lnet/lib-types.h b/lnet/include/lnet/lib-types.h index 3b1e46f..9150b74 100644 --- a/lnet/include/lnet/lib-types.h +++ b/lnet/include/lnet/lib-types.h @@ -46,7 +46,9 @@ #include #include #include +#include +#include #include #include #include @@ -88,7 +90,7 @@ struct lnet_rsp_tracker { /* cpt to lock */ int rspt_cpt; /* nid of next hop */ - lnet_nid_t rspt_next_hop_nid; + struct lnet_nid rspt_next_hop_nid; /* deadline of the REPLY/ACK */ ktime_t rspt_deadline; /* parent MD */ @@ -123,6 +125,8 @@ struct lnet_msg { enum lnet_msg_hstatus msg_health_status; /* This is a recovery message */ bool msg_recovery; + /* force an RDMA even if the message size is < 4K */ + bool msg_rdma_force; /* the number of times a transmission has been retried */ int msg_retry_count; /* flag to indicate that we do not want to resend this message */ @@ -232,7 +236,7 @@ struct lnet_libmd { struct lnet_test_peer { /* info about peers we are trying to fail */ struct list_head tp_list; /* ln_test_peers */ - lnet_nid_t tp_nid; /* matching nid */ + struct lnet_nid tp_nid; /* matching nid */ unsigned int tp_threshold; /* # failures to simulate */ }; @@ -247,7 +251,11 @@ struct netstrfns { char *nf_name; char *nf_modname; void (*nf_addr2str)(u32 addr, char *str, size_t size); + void (*nf_addr2str_size)(const __be32 *addr, size_t asize, + char *str, size_t size); int (*nf_str2addr)(const char *str, int nob, u32 *addr); + int (*nf_str2addr_size)(const char *str, int nob, + __be32 *addr, size_t *asize); int (*nf_parse_addrlist)(char *str, int len, struct list_head *list); int (*nf_print_addrlist)(char *buffer, int count, @@ -307,6 +315,10 @@ struct lnet_lnd { /* accept a new connection */ int (*lnd_accept)(struct lnet_ni *ni, struct socket *sock); + + /* get dma_dev priority */ + unsigned int (*lnd_get_dev_prio)(struct lnet_ni *ni, + unsigned int dev_idx); }; struct lnet_tx_queue { @@ -447,7 +459,7 @@ struct lnet_ni { __u32 *ni_cpts; /* interface's NID */ - lnet_nid_t ni_nid; + struct lnet_nid ni_nid; /* instance-specific data */ void *ni_data; @@ -473,6 +485,13 @@ struct lnet_ni { /* Recovery state. Protected by lnet_ni_lock() */ __u32 ni_recovery_state; + /* When to send the next recovery ping */ + time64_t ni_next_ping; + /* How many pings sent during current recovery period did not receive + * a reply. NB: reset whenever _any_ message arrives on this NI + */ + unsigned int ni_ping_count; + /* per NI LND tunables */ struct lnet_lnd_tunables ni_lnd_tunables; @@ -540,7 +559,7 @@ struct lnet_ping_buffer { struct lnet_nid_list { struct list_head nl_list; - lnet_nid_t nl_nid; + struct lnet_nid nl_nid; }; struct lnet_peer_ni { @@ -578,7 +597,7 @@ struct lnet_peer_ni { /* network peer is on */ struct lnet_net *lpni_net; /* peer's NID */ - lnet_nid_t lpni_nid; + struct lnet_nid lpni_nid; /* # refs */ struct kref lpni_kref; /* health value for the peer */ @@ -607,7 +626,7 @@ struct lnet_peer_ni { time64_t lpni_last_alive; /* preferred local nids: if only one, use lpni_pref.nid */ union lpni_pref { - lnet_nid_t nid; + struct lnet_nid nid; struct list_head nids; } lpni_pref; /* list of router nids preferred for this peer NI */ @@ -641,10 +660,12 @@ struct lnet_peer { struct list_head lp_rtr_list; /* primary NID of the peer */ - lnet_nid_t lp_primary_nid; + struct lnet_nid lp_primary_nid; /* source NID to use during discovery */ - lnet_nid_t lp_disc_src_nid; + struct lnet_nid lp_disc_src_nid; + /* destination NID to use during discovery */ + struct lnet_nid lp_disc_dst_nid; /* net to perform discovery on */ __u32 lp_disc_net_id; @@ -786,6 +807,13 @@ struct lnet_peer { #define LNET_PEER_MARK_DELETION BIT(18) /* lnet_peer_del()/lnet_peer_del_locked() has been called on the peer */ #define LNET_PEER_MARK_DELETED BIT(19) +/* lock primary NID to what's requested by ULP */ +#define LNET_PEER_LOCK_PRIMARY BIT(20) +/* this is for informational purposes only. It is set if a peer gets + * configured from Lustre with a primary NID which belongs to another peer + * which is also configured by Lustre as the primary NID. + */ +#define LNET_PEER_BAD_CONFIG BIT(21) struct lnet_peer_net { /* chain on lp_peer_nets */ @@ -803,8 +831,8 @@ struct lnet_peer_net { /* peer net health */ int lpn_healthv; - /* time of last router net check attempt */ - time64_t lpn_rtrcheck_timestamp; + /* time of next router ping on this net */ + time64_t lpn_next_ping; /* selection sequence number */ __u32 lpn_seq; @@ -855,7 +883,7 @@ struct lnet_route { struct list_head lr_list; /* chain on net */ struct list_head lr_gwlist; /* chain on gateway */ struct lnet_peer *lr_gateway; /* router node */ - lnet_nid_t lr_nid; /* NID used to add route */ + struct lnet_nid lr_nid; /* NID used to add route */ __u32 lr_net; /* remote network number */ __u32 lr_lnet; /* local network number */ int lr_seq; /* sequence for round-robin */ @@ -1245,4 +1273,44 @@ struct lnet { struct list_head ln_udsp_list; }; +static const struct nla_policy scalar_attr_policy[LN_SCALAR_CNT + 1] = { + [LN_SCALAR_ATTR_LIST] = { .type = NLA_NESTED }, + [LN_SCALAR_ATTR_LIST_SIZE] = { .type = NLA_U16 }, + [LN_SCALAR_ATTR_INDEX] = { .type = NLA_U16 }, + [LN_SCALAR_ATTR_NLA_TYPE] = { .type = NLA_U16 }, + [LN_SCALAR_ATTR_VALUE] = { .type = NLA_STRING }, + [LN_SCALAR_ATTR_KEY_FORMAT] = { .type = NLA_U16 }, +}; + +int lnet_genl_send_scalar_list(struct sk_buff *msg, u32 portid, u32 seq, + const struct genl_family *family, int flags, + u8 cmd, const struct ln_key_list *data[]); + +/* Special workaround for pre-4.19 kernels to send error messages + * from dumpit routines. Newer kernels will send message with + * NL_SET_ERR_MSG information by default if NETLINK_EXT_ACK is set. + */ +static inline int lnet_nl_send_error(struct sk_buff *msg, int portid, int seq, + int error) +{ +#ifndef HAVE_NL_DUMP_WITH_EXT_ACK + struct nlmsghdr *nlh; + + if (!error) + return 0; + + nlh = nlmsg_put(msg, portid, seq, NLMSG_ERROR, sizeof(error), 0); + if (!nlh) + return -ENOMEM; +#ifdef HAVE_NL_PARSE_WITH_EXT_ACK + netlink_ack(msg, nlh, error, NULL); +#else + netlink_ack(msg, nlh, error); +#endif + return nlmsg_len(nlh); +#else + return error; +#endif +} + #endif