 write_unlock_irqrestore(&intf->users_lock, flags); up_read(&interfaces_sem); 
spin_unlock_irqrestore(&intf->seq_lock, flags);  /* * Remove the user from the command receiver's table.  First * we build a list of everything (not using the standard link, * since other things may be using it till we do * synchronize_rcu()) then free everything in that list. */ spin_lock_irqsave(&intf->cmd_rcvrs_lock, flags); list_for_each_safe_rcu(entry1, entry2, &intf->cmd_rcvrs) { rcvr = list_entry(entry1, struct cmd_rcvr, link); if (rcvr->user == user) { list_del_rcu(&rcvr->link); rcvr->next = rcvrs; rcvrs = rcvr; } } spin_unlock_irqrestore(&intf->cmd_rcvrs_lock, flags); synchronize_rcu(); while (rcvrs) { rcvr = rcvrs; rcvrs = rcvr->next; kfree(rcvr); }  module_put(intf->handlers->owner); if (intf->handlers->dec_usecount) intf->handlers->dec_usecount(intf->send_info);  kref_put(&intf->refcount, intf_free);  kref_put(&user->refcount, free_user);  
int ipmi_destroy_user(ipmi_user_t user){	int           rv;	ipmi_smi_t    intf = user->intf;	unsigned long flags;	down_read(&interfaces_sem);	write_lock_irqsave(&intf->users_lock, flags);	rv = ipmi_destroy_user_nolock(user);	if (!rv) {		module_put(intf->handlers->owner);		if (intf->handlers->dec_usecount)			intf->handlers->dec_usecount(intf->send_info);	}			write_unlock_irqrestore(&intf->users_lock, flags);	up_read(&interfaces_sem);	return rv;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/393d2cc354d150b8b4bb888a9da7db4c935e12bd/ipmi_msghandler.c/clean/drivers/char/ipmi/ipmi_msghandler.c