[stgt] [PATCH] When iSNS is turned of deregister all targets at once

Chandra Seetharaman sekharan at us.ibm.com
Fri Aug 20 18:53:54 CEST 2010


That is good to know (even though there was nothing wrong with the
earlier code :)...

chandra

On Fri, 2010-08-20 at 11:08 +0200, Albert Pauw wrote:
> 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


--
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