Lines Matching refs:swnreg

76 static int cifs_swn_send_register_message(struct cifs_swn_reg *swnreg)
96 ret = nla_put_u32(skb, CIFS_GENL_ATTR_SWN_REGISTRATION_ID, swnreg->id);
100 ret = nla_put_string(skb, CIFS_GENL_ATTR_SWN_NET_NAME, swnreg->net_name);
104 ret = nla_put_string(skb, CIFS_GENL_ATTR_SWN_SHARE_NAME, swnreg->share_name);
114 if (swnreg->tcon->ses->server->use_swn_dstaddr)
115 addr = &swnreg->tcon->ses->server->swn_dstaddr;
117 addr = &swnreg->tcon->ses->server->dstaddr;
123 if (swnreg->net_name_notify) {
129 if (swnreg->share_name_notify) {
135 if (swnreg->ip_notify) {
141 authtype = cifs_select_sectype(swnreg->tcon->ses->server, swnreg->tcon->ses->sectype);
144 ret = cifs_swn_auth_info_krb(swnreg->tcon, skb);
152 ret = cifs_swn_auth_info_ntlm(swnreg->tcon, skb);
168 swnreg->net_name, swnreg->id);
182 static int cifs_swn_send_unregister_message(struct cifs_swn_reg *swnreg)
198 ret = nla_put_u32(skb, CIFS_GENL_ATTR_SWN_REGISTRATION_ID, swnreg->id);
202 ret = nla_put_string(skb, CIFS_GENL_ATTR_SWN_NET_NAME, swnreg->net_name);
206 ret = nla_put_string(skb, CIFS_GENL_ATTR_SWN_SHARE_NAME, swnreg->share_name);
211 &swnreg->tcon->ses->server->dstaddr);
215 if (swnreg->net_name_notify) {
221 if (swnreg->share_name_notify) {
227 if (swnreg->ip_notify) {
237 swnreg->net_name, swnreg->id);
254 struct cifs_swn_reg *swnreg;
280 idr_for_each_entry(&cifs_swnreg_idr, swnreg, id) {
281 if (strcasecmp(swnreg->net_name, net_name) != 0
282 || strcasecmp(swnreg->share_name, share_name) != 0) {
286 cifs_dbg(FYI, "Existing swn registration for %s:%s found\n", swnreg->net_name,
287 swnreg->share_name);
292 return swnreg;
374 struct cifs_swn_reg *swnreg = container_of(ref, struct cifs_swn_reg, ref_count);
377 ret = cifs_swn_send_unregister_message(swnreg);
381 idr_remove(&cifs_swnreg_idr, swnreg->id);
382 kfree(swnreg->net_name);
383 kfree(swnreg->share_name);
384 kfree(swnreg);
387 static void cifs_put_swn_reg(struct cifs_swn_reg *swnreg)
390 kref_put(&swnreg->ref_count, cifs_swn_reg_release);
394 static int cifs_swn_resource_state_changed(struct cifs_swn_reg *swnreg, const char *name, int state)
399 cifs_signal_cifsd_for_reconnect(swnreg->tcon->ses->server, true);
403 cifs_signal_cifsd_for_reconnect(swnreg->tcon->ses->server, true);
509 static int cifs_swn_client_move(struct cifs_swn_reg *swnreg, struct sockaddr_storage *addr)
519 return cifs_swn_reconnect(swnreg->tcon, addr);
524 struct cifs_swn_reg *swnreg;
533 swnreg = idr_find(&cifs_swnreg_idr, swnreg_id);
535 if (swnreg == NULL) {
568 return cifs_swn_resource_state_changed(swnreg, name, state);
579 return cifs_swn_client_move(swnreg, &addr);
591 struct cifs_swn_reg *swnreg;
594 swnreg = cifs_get_swn_reg(tcon);
595 if (IS_ERR(swnreg))
596 return PTR_ERR(swnreg);
598 ret = cifs_swn_send_register_message(swnreg);
601 /* Do not put the swnreg or return error, the echo task will retry */
609 struct cifs_swn_reg *swnreg;
613 swnreg = cifs_find_swn_reg(tcon);
614 if (IS_ERR(swnreg)) {
616 return PTR_ERR(swnreg);
621 cifs_put_swn_reg(swnreg);
628 struct cifs_swn_reg *swnreg;
636 idr_for_each_entry(&cifs_swnreg_idr, swnreg, id) {
638 id, kref_read(&swnreg->ref_count),
639 swnreg->net_name, swnreg->net_name_notify ? "(y)" : "(n)",
640 swnreg->share_name, swnreg->share_name_notify ? "(y)" : "(n)");
641 switch (swnreg->tcon->ses->server->dstaddr.ss_family) {
643 sa = (struct sockaddr_in *) &swnreg->tcon->ses->server->dstaddr;
647 sa6 = (struct sockaddr_in6 *) &swnreg->tcon->ses->server->dstaddr;
655 seq_printf(m, "%s", swnreg->ip_notify ? "(y)" : "(n)");
663 struct cifs_swn_reg *swnreg;
668 idr_for_each_entry(&cifs_swnreg_idr, swnreg, id) {
669 ret = cifs_swn_send_register_message(swnreg);