dprintk(DEBUG_VFS, "inode: %p file: %p v9fid= %p\n", inode, file, v9fid); 
dprintk(DEBUG_VFS, "inode: %p file: %p \n", inode, file);  v9fid = v9fs_fid_get_created(file->f_dentry); if (!v9fid) v9fid = v9fs_fid_lookup(file->f_dentry); 
int v9fs_file_open(struct inode *inode, struct file *file){	struct v9fs_session_info *v9ses = v9fs_inode2v9ses(inode);	struct v9fs_fid *v9fid = v9fs_fid_lookup(file->f_dentry, FID_WALK);	struct v9fs_fid *v9newfid = NULL;	struct v9fs_fcall *fcall = NULL;	int open_mode = 0;	unsigned int iounit = 0;	int newfid = -1;	long result = -1;	dprintk(DEBUG_VFS, "inode: %p file: %p v9fid= %p\n", inode, file,		v9fid);	if (!v9fid) {		struct dentry *dentry = file->f_dentry;		dprintk(DEBUG_ERROR, "Couldn't resolve fid from dentry\n");		/* XXX - some duplication from lookup, generalize later */		/* basically vfs_lookup is too heavy weight */		v9fid = v9fs_fid_lookup(file->f_dentry, FID_OP);		if (!v9fid)			return -EBADF;		v9fid = v9fs_fid_lookup(dentry->d_parent, FID_WALK);		if (!v9fid)			return -EBADF;		newfid = v9fs_get_idpool(&v9ses->fidpool);		if (newfid < 0) {			eprintk(KERN_WARNING, "newfid fails!\n");			return -ENOSPC;		}		result =		    v9fs_t_walk(v9ses, v9fid->fid, newfid,				(char *)file->f_dentry->d_name.name, NULL);		if (result < 0) {			v9fs_put_idpool(newfid, &v9ses->fidpool);			dprintk(DEBUG_ERROR, "rewalk didn't work\n");			return -EBADF;		}		v9fid = v9fs_fid_create(dentry);		if (v9fid == NULL) {			dprintk(DEBUG_ERROR, "couldn't insert\n");			return -ENOMEM;		}		v9fid->fid = newfid;	}	if (v9fid->fidcreate) {		/* create case */		newfid = v9fid->fid;		iounit = v9fid->iounit;		v9fid->fidcreate = 0;	} else {		if (!S_ISDIR(inode->i_mode))			newfid = v9fid->fid;		else {			newfid = v9fs_get_idpool(&v9ses->fidpool);			if (newfid < 0) {				eprintk(KERN_WARNING, "allocation failed\n");				return -ENOSPC;			}			/* This would be a somewhat critical clone */			result =			    v9fs_t_walk(v9ses, v9fid->fid, newfid, NULL,					&fcall);			if (result < 0) {				dprintk(DEBUG_ERROR, "clone error: %s\n",					FCALL_ERROR(fcall));				kfree(fcall);				return result;			}			v9newfid = v9fs_fid_create(file->f_dentry);			v9newfid->fid = newfid;			v9newfid->qid = v9fid->qid;			v9newfid->iounit = v9fid->iounit;			v9newfid->fidopen = 0;			v9newfid->fidclunked = 0;			v9newfid->v9ses = v9ses;			v9fid = v9newfid;			kfree(fcall);		}		/* TODO: do special things for O_EXCL, O_NOFOLLOW, O_SYNC */		/* translate open mode appropriately */		open_mode = file->f_flags & 0x3;		if (file->f_flags & O_EXCL)			open_mode |= V9FS_OEXCL;		if (v9ses->extended) {			if (file->f_flags & O_TRUNC)				open_mode |= V9FS_OTRUNC;			if (file->f_flags & O_APPEND)				open_mode |= V9FS_OAPPEND;		}		result = v9fs_t_open(v9ses, newfid, open_mode, &fcall);		if (result < 0) {			dprintk(DEBUG_ERROR,				"open failed, open_mode 0x%x: %s\n", open_mode,				FCALL_ERROR(fcall));			kfree(fcall);			return result;		}		iounit = fcall->params.ropen.iounit;		kfree(fcall);	}	file->private_data = v9fid;	v9fid->rdir_pos = 0;	v9fid->rdir_fcall = NULL;	v9fid->fidopen = 1;	v9fid->filp = file;	v9fid->iounit = iounit;	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0b8dd17762194ec77066d339e0b2866b0c66b715/vfs_file.c/clean/fs/9p/vfs_file.c