[stgt] [PATCH] When iSNS is turned of deregister all targets at once
Albert Pauw
albert.pauw at gmail.com
Fri Aug 20 11:08:05 CEST 2010
Seems with these last patches open-isns behaves properly again.
When I switch isns off in tgtd, open-isns deregisters but doesn't go
into a spin anymore.
Albert
On 08/16/2010 11:13 PM, Chandra Seetharaman wrote:
> iSNS spec(RFC 4141) Section 5.6.5.4:
>
> Upon receiving the DevDereg,the iSNS server removes all objects identified
> by the Operating Attribute(s), and all subordinate objects that are solely
> dependent on those identified objects. For example, removal of a Network Entity
> also results in removal of all associated Portal, Portal Group,Storage Node,
> and FC Device objects associated with that Network Entity.
>
> This patch takes advantage of the above mentioned feature to deregister
> all defined targets at once when isns is turned Off by the user by deregistering
> the entity.
>
> Signed-Off-By: Chandra Seetharaman<sekharan at us.ibm.com>
> ---
> usr/iscsi/isns.c | 44 +++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 41 insertions(+), 3 deletions(-)
>
> Index: tgt-469b574/usr/iscsi/isns.c
> ===================================================================
> --- tgt-469b574.orig/usr/iscsi/isns.c
> +++ tgt-469b574/usr/iscsi/isns.c
> @@ -999,6 +999,39 @@ int isns_init(void)
> return 0;
> }
>
> +int isns_eid_deregister(void)
> +{
> + char buf[4096];
> + uint16_t flags, length = 0;
> + struct isns_hdr *hdr = (struct isns_hdr *) buf;
> + struct isns_tlv *tlv;
> + struct iscsi_target *target;
> + int err;
> +
> + if (!isns_fd)
> + if (isns_connect()< 0)
> + return 0;
> +
> + memset(buf, 0, sizeof(buf));
> + tlv = (struct isns_tlv *) hdr->pdu;
> +
> + target = list_first_entry(&iscsi_targets_list,
> + struct iscsi_target, tlist);
> + length += isns_tlv_set_string(&tlv, ISNS_ATTR_ISCSI_NAME,
> + tgt_targetname(target->tid));
> + length += isns_tlv_set(&tlv, 0, 0, 0);
> + length += isns_tlv_set_string(&tlv, ISNS_ATTR_ENTITY_IDENTIFIER,
> + eid);
> + flags = ISNS_FLAG_CLIENT | ISNS_FLAG_LAST_PDU | ISNS_FLAG_FIRST_PDU;
> + isns_hdr_init(hdr, ISNS_FUNC_DEV_DEREG, length, flags,
> + ++transaction, 0);
> +
> + err = write(isns_fd, buf, length + sizeof(struct isns_hdr));
> + if (err< 0)
> + eprintf("%d %m\n", length);
> +
> + return 0;
> +}
> void isns_exit(void)
> {
> struct iscsi_target *target;
> @@ -1006,8 +1039,13 @@ void isns_exit(void)
> if (!use_isns)
> return;
>
> - list_for_each_entry(target,&iscsi_targets_list, tlist)
> - isns_target_deregister(tgt_targetname(target->tid));
> + if (num_targets) {
> + del_work(&timeout_work);
> + list_for_each_entry(target,&iscsi_targets_list, tlist)
> + free_all_acl(target);
> +
> + isns_eid_deregister();
> + }
>
> if (isns_fd) {
> tgt_event_del(isns_fd);
> @@ -1022,7 +1060,7 @@ void isns_exit(void)
> close(scn_fd);
> }
>
> - use_isns = isns_fd = scn_listen_fd = scn_fd = 0;
> + num_targets = use_isns = isns_fd = scn_listen_fd = scn_fd = 0;
> free(rxbuf);
> }
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe stgt" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list