These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / net / rds / transport.c
index 7f2ac4f..f3afd1d 100644 (file)
@@ -73,11 +73,11 @@ EXPORT_SYMBOL_GPL(rds_trans_unregister);
 
 void rds_trans_put(struct rds_transport *trans)
 {
-       if (trans && trans->t_owner)
+       if (trans)
                module_put(trans->t_owner);
 }
 
-struct rds_transport *rds_trans_get_preferred(__be32 addr)
+struct rds_transport *rds_trans_get_preferred(struct net *net, __be32 addr)
 {
        struct rds_transport *ret = NULL;
        struct rds_transport *trans;
@@ -90,7 +90,28 @@ struct rds_transport *rds_trans_get_preferred(__be32 addr)
        for (i = 0; i < RDS_TRANS_COUNT; i++) {
                trans = transports[i];
 
-               if (trans && (trans->laddr_check(addr) == 0) &&
+               if (trans && (trans->laddr_check(net, addr) == 0) &&
+                   (!trans->t_owner || try_module_get(trans->t_owner))) {
+                       ret = trans;
+                       break;
+               }
+       }
+       up_read(&rds_trans_sem);
+
+       return ret;
+}
+
+struct rds_transport *rds_trans_get(int t_type)
+{
+       struct rds_transport *ret = NULL;
+       struct rds_transport *trans;
+       unsigned int i;
+
+       down_read(&rds_trans_sem);
+       for (i = 0; i < RDS_TRANS_COUNT; i++) {
+               trans = transports[i];
+
+               if (trans && trans->t_type == t_type &&
                    (!trans->t_owner || try_module_get(trans->t_owner))) {
                        ret = trans;
                        break;