zfcp_fsf_req_cleanup(fsf_req); 
zfcp_fsf_req_free(fsf_req); 
zfcp_fsf_req_complete(struct zfcp_fsf_req *fsf_req){	int retval = 0;	int cleanup;	struct zfcp_adapter *adapter = fsf_req->adapter;	/* do some statistics */	atomic_dec(&adapter->fsf_reqs_active);	if (unlikely(fsf_req->fsf_command == FSF_QTCB_UNSOLICITED_STATUS)) {		ZFCP_LOG_DEBUG("Status read response received\n");		/*		 * Note: all cleanup handling is done in the callchain of		 * the function call-chain below.		 */		zfcp_fsf_status_read_handler(fsf_req);		goto out;	} else		zfcp_fsf_protstatus_eval(fsf_req);	/*	 * fsf_req may be deleted due to waking up functions, so 	 * cleanup is saved here and used later 	 */	if (likely(fsf_req->status & ZFCP_STATUS_FSFREQ_CLEANUP))		cleanup = 1;	else		cleanup = 0;	fsf_req->status |= ZFCP_STATUS_FSFREQ_COMPLETED;	/* cleanup request if requested by initiator */	if (likely(cleanup)) {		ZFCP_LOG_TRACE("removing FSF request %p\n", fsf_req);		/*		 * lock must not be held here since it will be		 * grabed by the called routine, too		 */		zfcp_fsf_req_cleanup(fsf_req);	} else {		/* notify initiator waiting for the requests completion */		ZFCP_LOG_TRACE("waking initiator of FSF request %p\n",fsf_req);		/*		 * FIXME: Race! We must not access fsf_req here as it might have been		 * cleaned up already due to the set ZFCP_STATUS_FSFREQ_COMPLETED		 * flag. It's an improbable case. But, we have the same paranoia for		 * the cleanup flag already.		 * Might better be handled using complete()?		 * (setting the flag and doing wakeup ought to be atomic		 *  with regard to checking the flag as long as waitqueue is		 *  part of the to be released structure)		 */		wake_up(&fsf_req->completion_wq);	} out:	return retval;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1db2c9c0931a53fe013db55fd2ff58859db31e8d/zfcp_fsf.c/clean/drivers/s390/scsi/zfcp_fsf.c