Import of kernel-4.18.0-553.107.1.el8_10
This commit is contained in:
parent
b2073ebb54
commit
d52c534746
@ -12,7 +12,7 @@ RHEL_MINOR = 10
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 553.105.1
|
||||
RHEL_RELEASE = 553.107.1
|
||||
|
||||
#
|
||||
# ZSTREAM
|
||||
|
||||
@ -1325,4 +1325,15 @@ static inline u32 i40e_is_tc_mqprio_enabled(struct i40e_pf *pf)
|
||||
return pf->flags & I40E_FLAG_TC_MQPRIO;
|
||||
}
|
||||
|
||||
static inline u32 i40e_get_max_num_descriptors(const struct i40e_pf *pf)
|
||||
{
|
||||
const struct i40e_hw *hw = &pf->hw;
|
||||
|
||||
switch (hw->mac.type) {
|
||||
case I40E_MAC_XL710:
|
||||
return I40E_MAX_NUM_DESCRIPTORS_XL710;
|
||||
default:
|
||||
return I40E_MAX_NUM_DESCRIPTORS;
|
||||
}
|
||||
}
|
||||
#endif /* _I40E_H_ */
|
||||
|
||||
@ -2013,18 +2013,6 @@ static void i40e_get_drvinfo(struct net_device *netdev,
|
||||
drvinfo->n_priv_flags += I40E_GL_PRIV_FLAGS_STR_LEN;
|
||||
}
|
||||
|
||||
static u32 i40e_get_max_num_descriptors(struct i40e_pf *pf)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
|
||||
switch (hw->mac.type) {
|
||||
case I40E_MAC_XL710:
|
||||
return I40E_MAX_NUM_DESCRIPTORS_XL710;
|
||||
default:
|
||||
return I40E_MAX_NUM_DESCRIPTORS;
|
||||
}
|
||||
}
|
||||
|
||||
static void i40e_get_ringparam(struct net_device *netdev,
|
||||
struct ethtool_ringparam *ring,
|
||||
struct kernel_ethtool_ringparam *kernel_ring,
|
||||
|
||||
@ -631,7 +631,7 @@ static int i40e_config_vsi_tx_queue(struct i40e_vf *vf, u16 vsi_id,
|
||||
|
||||
/* ring_len has to be multiple of 8 */
|
||||
if (!IS_ALIGNED(info->ring_len, 8) ||
|
||||
info->ring_len > I40E_MAX_NUM_DESCRIPTORS_XL710) {
|
||||
info->ring_len > i40e_get_max_num_descriptors(pf)) {
|
||||
ret = -EINVAL;
|
||||
goto error_context;
|
||||
}
|
||||
@ -703,7 +703,7 @@ static int i40e_config_vsi_rx_queue(struct i40e_vf *vf, u16 vsi_id,
|
||||
|
||||
/* ring_len has to be multiple of 32 */
|
||||
if (!IS_ALIGNED(info->ring_len, 32) ||
|
||||
info->ring_len > I40E_MAX_NUM_DESCRIPTORS_XL710) {
|
||||
info->ring_len > i40e_get_max_num_descriptors(pf)) {
|
||||
ret = -EINVAL;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
@ -440,7 +440,9 @@ int mlxsw_sp_mr_route_add(struct mlxsw_sp_mr_table *mr_table,
|
||||
rhashtable_remove_fast(&mr_table->route_ht,
|
||||
&mr_orig_route->ht_node,
|
||||
mlxsw_sp_mr_route_ht_params);
|
||||
mutex_lock(&mr_table->route_list_lock);
|
||||
list_del(&mr_orig_route->node);
|
||||
mutex_unlock(&mr_table->route_list_lock);
|
||||
mlxsw_sp_mr_route_destroy(mr_table, mr_orig_route);
|
||||
}
|
||||
|
||||
|
||||
@ -35,8 +35,9 @@ void autofs_catatonic_mode(struct autofs_sb_info *sbi)
|
||||
wq->status = -ENOENT; /* Magic is gone - report failure */
|
||||
kfree(wq->name.name);
|
||||
wq->name.name = NULL;
|
||||
wq->wait_ctr--;
|
||||
wake_up_interruptible(&wq->queue);
|
||||
wake_up(&wq->queue);
|
||||
if (!--wq->wait_ctr)
|
||||
kfree(wq);
|
||||
wq = nwq;
|
||||
}
|
||||
fput(sbi->pipe); /* Close the pipe */
|
||||
|
||||
@ -773,15 +773,16 @@ sparse_alloc:
|
||||
* invalid inode records, such as records that start at agbno 0
|
||||
* or extend beyond the AG.
|
||||
*
|
||||
* Set min agbno to the first aligned, non-zero agbno and max to
|
||||
* the last aligned agbno that is at least one full chunk from
|
||||
* the end of the AG.
|
||||
* Set min agbno to the first chunk aligned, non-zero agbno and
|
||||
* max to one less than the last chunk aligned agbno from the
|
||||
* end of the AG. We subtract 1 from max so that the cluster
|
||||
* allocation alignment takes over and allows allocation within
|
||||
* the last full inode chunk in the AG.
|
||||
*/
|
||||
args.min_agbno = args.mp->m_sb.sb_inoalignmt;
|
||||
args.max_agbno = round_down(xfs_ag_block_count(args.mp,
|
||||
pag->pag_agno),
|
||||
args.mp->m_sb.sb_inoalignmt) -
|
||||
igeo->ialloc_blks;
|
||||
args.mp->m_sb.sb_inoalignmt) - 1;
|
||||
|
||||
error = xfs_alloc_vextent(&args);
|
||||
if (error)
|
||||
|
||||
@ -2253,41 +2253,36 @@ void __audit_inode_child(struct inode *parent,
|
||||
if (inode)
|
||||
handle_one(inode);
|
||||
|
||||
/* look for a parent entry first */
|
||||
list_for_each_entry(n, &context->names_list, list) {
|
||||
if (!n->name ||
|
||||
(n->type != AUDIT_TYPE_PARENT &&
|
||||
n->type != AUDIT_TYPE_UNKNOWN))
|
||||
continue;
|
||||
|
||||
if (n->ino == parent->i_ino && n->dev == parent->i_sb->s_dev &&
|
||||
!audit_compare_dname_path(dname,
|
||||
n->name->name, n->name_len)) {
|
||||
if (n->type == AUDIT_TYPE_UNKNOWN)
|
||||
n->type = AUDIT_TYPE_PARENT;
|
||||
found_parent = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cond_resched();
|
||||
|
||||
/* is there a matching child entry? */
|
||||
list_for_each_entry(n, &context->names_list, list) {
|
||||
/* can only match entries that have a name */
|
||||
if (!n->name ||
|
||||
(n->type != type && n->type != AUDIT_TYPE_UNKNOWN))
|
||||
if (!n->name)
|
||||
continue;
|
||||
|
||||
if (!strcmp(dname->name, n->name->name) ||
|
||||
!audit_compare_dname_path(dname, n->name->name,
|
||||
/* look for a parent entry first */
|
||||
if (!found_parent &&
|
||||
(n->type == AUDIT_TYPE_PARENT || n->type == AUDIT_TYPE_UNKNOWN) &&
|
||||
(n->ino == parent->i_ino && n->dev == parent->i_sb->s_dev &&
|
||||
!audit_compare_dname_path(dname, n->name->name, n->name_len))) {
|
||||
n->type = AUDIT_TYPE_PARENT;
|
||||
found_parent = n;
|
||||
if (found_child)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* is there a matching child entry? */
|
||||
if (!found_child &&
|
||||
(n->type == type || n->type == AUDIT_TYPE_UNKNOWN) &&
|
||||
(!strcmp(dname->name, n->name->name) ||
|
||||
!audit_compare_dname_path(dname, n->name->name,
|
||||
found_parent ?
|
||||
found_parent->name_len :
|
||||
AUDIT_NAME_FULL)) {
|
||||
AUDIT_NAME_FULL))) {
|
||||
if (n->type == AUDIT_TYPE_UNKNOWN)
|
||||
n->type = type;
|
||||
found_child = n;
|
||||
break;
|
||||
if (found_parent)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1856,10 +1856,19 @@ void br_multicast_port_ctx_init(struct net_bridge_port *port,
|
||||
|
||||
void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
|
||||
{
|
||||
struct net_bridge *br = pmctx->port->br;
|
||||
bool del = false;
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
del_timer_sync(&pmctx->ip6_mc_router_timer);
|
||||
#endif
|
||||
del_timer_sync(&pmctx->ip4_mc_router_timer);
|
||||
|
||||
spin_lock_bh(&br->multicast_lock);
|
||||
del |= br_ip6_multicast_rport_del(pmctx);
|
||||
del |= br_ip4_multicast_rport_del(pmctx);
|
||||
br_multicast_rport_del_notify(pmctx, del);
|
||||
spin_unlock_bh(&br->multicast_lock);
|
||||
}
|
||||
|
||||
int br_multicast_add_port(struct net_bridge_port *port)
|
||||
|
||||
@ -347,14 +347,14 @@ static void page_pool_return_page(struct page_pool *pool, struct page *page)
|
||||
|
||||
static bool page_pool_recycle_in_ring(struct page_pool *pool, struct page *page)
|
||||
{
|
||||
int ret;
|
||||
/* BH protection not needed if current is softirq */
|
||||
if (in_softirq())
|
||||
ret = ptr_ring_produce(&pool->ring, page);
|
||||
else
|
||||
ret = ptr_ring_produce_bh(&pool->ring, page);
|
||||
bool in_softirq, ret;
|
||||
|
||||
return (ret == 0) ? true : false;
|
||||
/* BH protection not needed if current is softirq */
|
||||
in_softirq = page_pool_producer_lock(pool);
|
||||
ret = !__ptr_ring_produce(&pool->ring, page);
|
||||
page_pool_producer_unlock(pool, in_softirq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Only allow direct recycling in special circumstances, into the
|
||||
@ -534,10 +534,14 @@ static void page_pool_scrub(struct page_pool *pool)
|
||||
|
||||
static int page_pool_release(struct page_pool *pool)
|
||||
{
|
||||
bool in_softirq;
|
||||
int inflight;
|
||||
|
||||
page_pool_scrub(pool);
|
||||
inflight = page_pool_inflight(pool);
|
||||
/* Acquire producer lock to make sure producers have exited. */
|
||||
in_softirq = page_pool_producer_lock(pool);
|
||||
page_pool_producer_unlock(pool, in_softirq);
|
||||
if (!inflight)
|
||||
page_pool_free(pool);
|
||||
|
||||
|
||||
@ -182,6 +182,11 @@ static int teql_qdisc_init(struct Qdisc *sch, struct nlattr *opt,
|
||||
if (m->dev == dev)
|
||||
return -ELOOP;
|
||||
|
||||
if (sch->parent != TC_H_ROOT) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "teql can only be used as root");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
q->m = m;
|
||||
|
||||
skb_queue_head_init(&q->q);
|
||||
|
||||
@ -1113,37 +1113,38 @@ static void smc_pnet_find_ism_by_pnetid(struct net_device *ndev,
|
||||
*/
|
||||
void smc_pnet_find_roce_resource(struct sock *sk, struct smc_init_info *ini)
|
||||
{
|
||||
struct dst_entry *dst = sk_dst_get(sk);
|
||||
struct net_device *dev;
|
||||
struct dst_entry *dst;
|
||||
|
||||
if (!dst)
|
||||
goto out;
|
||||
if (!dst->dev)
|
||||
goto out_rel;
|
||||
rcu_read_lock();
|
||||
dst = __sk_dst_get(sk);
|
||||
dev = dst ? dst_dev_rcu(dst) : NULL;
|
||||
dev_hold(dev);
|
||||
rcu_read_unlock();
|
||||
|
||||
smc_pnet_find_roce_by_pnetid(dst->dev, ini);
|
||||
|
||||
out_rel:
|
||||
dst_release(dst);
|
||||
out:
|
||||
return;
|
||||
if (dev) {
|
||||
smc_pnet_find_roce_by_pnetid(dev, ini);
|
||||
dev_put(dev);
|
||||
}
|
||||
}
|
||||
|
||||
void smc_pnet_find_ism_resource(struct sock *sk, struct smc_init_info *ini)
|
||||
{
|
||||
struct dst_entry *dst = sk_dst_get(sk);
|
||||
struct net_device *dev;
|
||||
struct dst_entry *dst;
|
||||
|
||||
ini->ism_dev[0] = NULL;
|
||||
if (!dst)
|
||||
goto out;
|
||||
if (!dst->dev)
|
||||
goto out_rel;
|
||||
|
||||
smc_pnet_find_ism_by_pnetid(dst->dev, ini);
|
||||
rcu_read_lock();
|
||||
dst = __sk_dst_get(sk);
|
||||
dev = dst ? dst_dev_rcu(dst) : NULL;
|
||||
dev_hold(dev);
|
||||
rcu_read_unlock();
|
||||
|
||||
out_rel:
|
||||
dst_release(dst);
|
||||
out:
|
||||
return;
|
||||
if (dev) {
|
||||
smc_pnet_find_ism_by_pnetid(dev, ini);
|
||||
dev_put(dev);
|
||||
}
|
||||
}
|
||||
|
||||
/* Lookup and apply a pnet table entry to the given ib device.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user