nfs4_put_open_state(state); nfs_free_seqid(calldata->arg.seqid); up(&sp->so_sema); nfs4_put_state_owner(sp); up_read(&server->nfs4_state->cl_sem); kfree(calldata); 
nfs4_free_closedata(calldata); 
static void nfs4_close_done(struct rpc_task *task){	struct nfs4_closedata *calldata = (struct nfs4_closedata *)task->tk_calldata;	struct nfs4_state *state = calldata->state;	struct nfs4_state_owner *sp = state->owner;	struct nfs_server *server = NFS_SERVER(calldata->inode);        /* hmm. we are done with the inode, and in the process of freeing	 * the state_owner. we keep this around to process errors	 */	nfs_increment_open_seqid(task->tk_status, calldata->arg.seqid);	switch (task->tk_status) {		case 0:			memcpy(&state->stateid, &calldata->res.stateid,					sizeof(state->stateid));			break;		case -NFS4ERR_STALE_STATEID:		case -NFS4ERR_EXPIRED:			state->state = calldata->arg.open_flags;			nfs4_schedule_state_recovery(server->nfs4_state);			break;		default:			if (nfs4_async_handle_error(task, server) == -EAGAIN) {				rpc_restart_call(task);				return;			}	}	state->state = calldata->arg.open_flags;	nfs4_put_open_state(state);	nfs_free_seqid(calldata->arg.seqid);	up(&sp->so_sema);	nfs4_put_state_owner(sp);	up_read(&server->nfs4_state->cl_sem);	kfree(calldata);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9512135df14f8293b9bc5e8fb22d4279dee5ff66/nfs4proc.c/buggy/fs/nfs/nfs4proc.c