diff options
Diffstat (limited to 'fs/ceph/file.c')
| -rw-r--r-- | fs/ceph/file.c | 26 | 
1 files changed, 11 insertions, 15 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index 988d4f302e4..1b81d6c3187 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -213,22 +213,15 @@ out:   * may_open() fails, the struct *file gets cleaned up (i.e.   * ceph_release gets called).  So fear not!   */ -/* - * flags - *  path_lookup_open   -> LOOKUP_OPEN - *  path_lookup_create -> LOOKUP_OPEN|LOOKUP_CREATE - */ -struct dentry *ceph_lookup_open(struct inode *dir, struct dentry *dentry, -				struct nameidata *nd, int mode, -				int locked_dir) +int ceph_lookup_open(struct inode *dir, struct dentry *dentry, +		     struct file *file, unsigned flags, umode_t mode, +		     int *opened)  {  	struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb);  	struct ceph_mds_client *mdsc = fsc->mdsc; -	struct file *file;  	struct ceph_mds_request *req;  	struct dentry *ret;  	int err; -	int flags = nd->intent.open.flags;  	dout("ceph_lookup_open dentry %p '%.*s' flags %d mode 0%o\n",  	     dentry, dentry->d_name.len, dentry->d_name.name, flags, mode); @@ -236,7 +229,7 @@ struct dentry *ceph_lookup_open(struct inode *dir, struct dentry *dentry,  	/* do the open */  	req = prepare_open_request(dir->i_sb, flags, mode);  	if (IS_ERR(req)) -		return ERR_CAST(req); +		return PTR_ERR(req);  	req->r_dentry = dget(dentry);  	req->r_num_caps = 2;  	if (flags & O_CREAT) { @@ -254,14 +247,17 @@ struct dentry *ceph_lookup_open(struct inode *dir, struct dentry *dentry,  		err = ceph_handle_notrace_create(dir, dentry);  	if (err)  		goto out; -	file = lookup_instantiate_filp(nd, req->r_dentry, ceph_open); -	if (IS_ERR(file)) -		err = PTR_ERR(file); +	err = finish_open(file, req->r_dentry, ceph_open, opened);  out:  	ret = ceph_finish_lookup(req, dentry, err);  	ceph_mdsc_put_request(req);  	dout("ceph_lookup_open result=%p\n", ret); -	return ret; + +	if (IS_ERR(ret)) +		return PTR_ERR(ret); + +	dput(ret); +	return err;  }  int ceph_release(struct inode *inode, struct file *file)  |