|
|
|
@ -323,22 +323,21 @@ static int spufs_context_open(struct dentry *dentry, struct vfsmount *mnt) |
|
|
|
|
struct file *filp; |
|
|
|
|
|
|
|
|
|
ret = get_unused_fd(); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
dput(dentry); |
|
|
|
|
mntput(mnt); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
filp = dentry_open(dentry, mnt, O_RDONLY, current_cred()); |
|
|
|
|
/*
|
|
|
|
|
* get references for dget and mntget, will be released |
|
|
|
|
* in error path of *_open(). |
|
|
|
|
*/ |
|
|
|
|
filp = dentry_open(dget(dentry), mntget(mnt), O_RDONLY, current_cred()); |
|
|
|
|
if (IS_ERR(filp)) { |
|
|
|
|
put_unused_fd(ret); |
|
|
|
|
ret = PTR_ERR(filp); |
|
|
|
|
goto out; |
|
|
|
|
return PTR_ERR(filp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
filp->f_op = &spufs_context_fops; |
|
|
|
|
fd_install(ret, filp); |
|
|
|
|
out: |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -495,11 +494,7 @@ spufs_create_context(struct inode *inode, struct dentry *dentry, |
|
|
|
|
put_spu_context(neighbor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* get references for dget and mntget, will be released |
|
|
|
|
* in error path of *_open(). |
|
|
|
|
*/ |
|
|
|
|
ret = spufs_context_open(dget(dentry), mntget(mnt)); |
|
|
|
|
ret = spufs_context_open(dentry, mnt); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
WARN_ON(spufs_rmdir(inode, dentry)); |
|
|
|
|
if (affinity) |
|
|
|
@ -562,22 +557,21 @@ static int spufs_gang_open(struct dentry *dentry, struct vfsmount *mnt) |
|
|
|
|
struct file *filp; |
|
|
|
|
|
|
|
|
|
ret = get_unused_fd(); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
dput(dentry); |
|
|
|
|
mntput(mnt); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
filp = dentry_open(dentry, mnt, O_RDONLY, current_cred()); |
|
|
|
|
/*
|
|
|
|
|
* get references for dget and mntget, will be released |
|
|
|
|
* in error path of *_open(). |
|
|
|
|
*/ |
|
|
|
|
filp = dentry_open(dget(dentry), mntget(mnt), O_RDONLY, current_cred()); |
|
|
|
|
if (IS_ERR(filp)) { |
|
|
|
|
put_unused_fd(ret); |
|
|
|
|
ret = PTR_ERR(filp); |
|
|
|
|
goto out; |
|
|
|
|
return PTR_ERR(filp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
filp->f_op = &simple_dir_operations; |
|
|
|
|
fd_install(ret, filp); |
|
|
|
|
out: |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -591,11 +585,7 @@ static int spufs_create_gang(struct inode *inode, |
|
|
|
|
if (ret) |
|
|
|
|
goto out; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* get references for dget and mntget, will be released |
|
|
|
|
* in error path of *_open(). |
|
|
|
|
*/ |
|
|
|
|
ret = spufs_gang_open(dget(dentry), mntget(mnt)); |
|
|
|
|
ret = spufs_gang_open(dentry, mnt); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
int err = simple_rmdir(inode, dentry); |
|
|
|
|
WARN_ON(err); |
|
|
|
|