[Ocfs2-tools-devel] [PATCH 9/9] ocfs2_controld: Notify dlm_controld when we have a node go down.

Joel Becker Joel.Becker at oracle.com
Wed Aug 13 22:57:46 PDT 2008


On Wed, Aug 13, 2008 at 06:56:16PM -0700, Mark Fasheh wrote:
> > +void dlmcontrol_node_down(const char *name, int nodeid)
> > +{
> > +	int rc;
> > +	struct dlmcontrol_fs *df;
> > +	struct dlmcontrol_notification *dn;
> > +
> > +	df = find_fs(name);
> > +	if (!df) {
> > +		log_error("Name \"%s\" is unknown", name);
> > +		return;
> > +	}
> > +
> > +	dn = find_notification(df, nodeid);
> > +	if (!dn) {
> > +		dn = malloc(sizeof(struct dlmcontrol_notification));
> > +		if (!dn) {
> > +			log_error("Unable to allocate memory");
> > +			goto fail;
> > +		}
> > +		dn->dn_nodeid = nodeid;
> > +		list_add(&dn->dn_list, &df->df_notifications);
> > +	}
> > +
> > +	log_debug("Sending notification of node %d for \"%s\"",
> > +		  dn->dn_nodeid, df->df_name);
> > +	rc = dlmc_fs_notified(dlmcontrol_fd, df->df_name, dn->dn_nodeid);
> 
> Is dlmc_fs_notified() itself also fire and forget? Can we get into a
> situation where it'll take us to notify_result(), which will in turn call it
> again, which will in turn call notify_result, etc until we've eaten up a
> whole lot of stack...

	I see what you mean.  We're safe here.  dlmc_fs_notified() sends
the notify message to dlm_controld, but does not process any replies.
It won't recurse.  We pop back out to main.c:loop(), and can only get
notify_result() after a poll event.

Joel

-- 

Life's Little Instruction Book #80

	"Slow dance"

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127



More information about the Ocfs2-tools-devel mailing list