- list_for_each_safe(tmp, pos, &conn_unused_list) {
- c = list_entry(tmp, struct ptlrpc_connection, c_link);
- if (memcmp(peer, &c->c_peer, sizeof(*peer)) == 0 &&
- !match_connection_uuid(c, uuid)) {
- ptlrpc_connection_addref(c);
- list_del(&c->c_link);
- list_add(&c->c_link, &conn_list);
- GOTO(out, c);
- }
- }
-
- /* FIXME: this should be a slab once we can validate slab addresses
- * without OOPSing */
- OBD_ALLOC(c, sizeof(*c));
- if (c == NULL)
- GOTO(out, c);
-
- c->c_level = LUSTRE_CONN_NEW;
- c->c_xid_in = 1;
- c->c_xid_out = 1;
- c->c_generation = 1;
- c->c_epoch = 1;
- c->c_bootcount = 0;
- if (uuid)
- strcpy(c->c_remote_uuid, uuid);
- INIT_LIST_HEAD(&c->c_delayed_head);
- INIT_LIST_HEAD(&c->c_sending_head);
- INIT_LIST_HEAD(&c->c_dying_head);
- INIT_LIST_HEAD(&c->c_imports);
- INIT_LIST_HEAD(&c->c_exports);
- INIT_LIST_HEAD(&c->c_sb_chain);
- atomic_set(&c->c_refcount, 0);
- ptlrpc_connection_addref(c);
- spin_lock_init(&c->c_lock);
-
- memcpy(&c->c_peer, peer, sizeof(c->c_peer));
- list_add(&c->c_link, &conn_list);