make ->atomic_open() return int
Change of calling conventions:
old new
NULL 1
file 0
ERR_PTR(-ve) -ve
Caller *knows* that struct file *; no need to return it.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index 81e5e90..d8bfabe 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -634,21 +634,20 @@
return dentry;
}
-struct file *ceph_atomic_open(struct inode *dir, struct dentry *dentry,
- struct opendata *od, unsigned flags, umode_t mode,
- int *opened)
+int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
+ struct opendata *od, unsigned flags, umode_t mode,
+ int *opened)
{
int err;
struct dentry *res = NULL;
- struct file *filp;
if (!(flags & O_CREAT)) {
if (dentry->d_name.len > NAME_MAX)
- return ERR_PTR(-ENAMETOOLONG);
+ return -ENAMETOOLONG;
err = ceph_init_dentry(dentry);
if (err < 0)
- return ERR_PTR(err);
+ return err;
return ceph_lookup_open(dir, dentry, od, flags, mode, opened);
}
@@ -656,7 +655,7 @@
if (d_unhashed(dentry)) {
res = ceph_lookup(dir, dentry, NULL);
if (IS_ERR(res))
- return ERR_CAST(res);
+ return PTR_ERR(res);
if (res)
dentry = res;
@@ -665,14 +664,14 @@
/* We don't deal with positive dentries here */
if (dentry->d_inode) {
finish_no_open(od, res);
- return NULL;
+ return 1;
}
*opened |= FILE_CREATED;
- filp = ceph_lookup_open(dir, dentry, od, flags, mode, opened);
+ err = ceph_lookup_open(dir, dentry, od, flags, mode, opened);
dput(res);
- return filp;
+ return err;
}
/*
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 4c304a9..b8cc3ee 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -213,9 +213,9 @@
* may_open() fails, the struct *file gets cleaned up (i.e.
* ceph_release gets called). So fear not!
*/
-struct file *ceph_lookup_open(struct inode *dir, struct dentry *dentry,
- struct opendata *od, unsigned flags, umode_t mode,
- int *opened)
+int ceph_lookup_open(struct inode *dir, struct dentry *dentry,
+ struct opendata *od, 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;
@@ -230,7 +230,7 @@
/* 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) {
@@ -257,10 +257,10 @@
dout("ceph_lookup_open result=%p\n", ret);
if (IS_ERR(ret))
- return ERR_CAST(ret);
+ return PTR_ERR(ret);
dput(ret);
- return err ? ERR_PTR(err) : file;
+ return err;
}
int ceph_release(struct inode *inode, struct file *file)
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index f9a3251..f7e8e82 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -806,9 +806,9 @@
loff_t off, size_t len);
extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags);
extern int ceph_open(struct inode *inode, struct file *file);
-extern struct file *ceph_lookup_open(struct inode *dir, struct dentry *dentry,
- struct opendata *od, unsigned flags,
- umode_t mode, int *opened);
+extern int ceph_lookup_open(struct inode *dir, struct dentry *dentry,
+ struct opendata *od, unsigned flags,
+ umode_t mode, int *opened);
extern int ceph_release(struct inode *inode, struct file *filp);
/* dir.c */