mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Remove excl arg to ->create inode_operation
The only time that 'false' is passed as the 'excl' arg to the ->create inode_operation is in lookup_open() when ->atomic_open is not provided by the parent directory. *all* directory inode_operations which do not have ->atomic_open completely ignore the 'excl' arg. Therefore we don't need the 'excl' arg. Those few ->create operations which pay attention to the arg are only ever called with a value of 'true'. We remove that arg and change all ->create operations to behave as those thhe arg were 'true'. Signed-off-by: NeilBrown <neil@brown.name> Link: https://patch.msgid.link/178290671516.27465.15984496764174914338@noble.neil.brown.name Reviewed-by: Jori Koolstra <jkoolstra@xs4all.nl> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
@@ -61,7 +61,7 @@ inode_operations
|
||||
|
||||
prototypes::
|
||||
|
||||
int (*create) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t, bool);
|
||||
int (*create) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t);
|
||||
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
|
||||
int (*link) (struct dentry *,struct inode *,struct dentry *);
|
||||
int (*unlink) (struct inode *,struct dentry *);
|
||||
|
||||
@@ -1401,3 +1401,11 @@ as with d_dispose_if_unused() these are not trivial; with this variant
|
||||
of API it's more explicit, since grabbing ->d_lock is caller-side, but
|
||||
d_dispose_if_unused() had all the same issues. It's a low-level primitive;
|
||||
use only if you have no alternative.
|
||||
|
||||
---
|
||||
|
||||
**mandatory**
|
||||
|
||||
The .create inode_operation no longer receives the 'excl' arg. It must
|
||||
always assume the file does not already exist. If the filesystem needs
|
||||
to be involved in non-exclusive create, it should provide atomic_open.
|
||||
|
||||
@@ -415,7 +415,7 @@ As of kernel 2.6.22, the following members are defined:
|
||||
.. code-block:: c
|
||||
|
||||
struct inode_operations {
|
||||
int (*create) (struct mnt_idmap *, struct inode *,struct dentry *, umode_t, bool);
|
||||
int (*create) (struct mnt_idmap *, struct inode *,struct dentry *, umode_t);
|
||||
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
|
||||
int (*link) (struct dentry *,struct inode *,struct dentry *);
|
||||
int (*unlink) (struct inode *,struct dentry *);
|
||||
|
||||
+1
-2
@@ -645,7 +645,6 @@ error:
|
||||
* @dir: The parent directory
|
||||
* @dentry: The name of file to be created
|
||||
* @mode: The UNIX file mode to set
|
||||
* @excl: True if the file must not yet exist
|
||||
*
|
||||
* open(.., O_CREAT) is handled in v9fs_vfs_atomic_open(). This is only called
|
||||
* for mknod(2).
|
||||
@@ -654,7 +653,7 @@ error:
|
||||
|
||||
static int
|
||||
v9fs_vfs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct v9fs_session_info *v9ses = v9fs_inode2v9ses(dir);
|
||||
u32 perm = unixmode2p9mode(v9ses, mode);
|
||||
|
||||
@@ -213,12 +213,11 @@ int v9fs_open_to_dotl_flags(int flags)
|
||||
* @dir: directory inode that is being created
|
||||
* @dentry: dentry that is being deleted
|
||||
* @omode: create permissions
|
||||
* @excl: True if the file must not yet exist
|
||||
*
|
||||
*/
|
||||
static int
|
||||
v9fs_vfs_create_dotl(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t omode, bool excl)
|
||||
struct dentry *dentry, umode_t omode)
|
||||
{
|
||||
return v9fs_vfs_mknod_dotl(idmap, dir, dentry, omode, 0);
|
||||
}
|
||||
|
||||
+1
-1
@@ -169,7 +169,7 @@ extern int affs_hash_name(struct super_block *sb, const u8 *name, unsigned int l
|
||||
extern struct dentry *affs_lookup(struct inode *dir, struct dentry *dentry, unsigned int);
|
||||
extern int affs_unlink(struct inode *dir, struct dentry *dentry);
|
||||
extern int affs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool);
|
||||
struct dentry *dentry, umode_t mode);
|
||||
extern struct dentry *affs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode);
|
||||
extern int affs_rmdir(struct inode *dir, struct dentry *dentry);
|
||||
|
||||
+1
-1
@@ -243,7 +243,7 @@ affs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
|
||||
int
|
||||
affs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct super_block *sb = dir->i_sb;
|
||||
struct inode *inode;
|
||||
|
||||
+2
-2
@@ -32,7 +32,7 @@ static bool afs_lookup_one_filldir(struct dir_context *ctx, const char *name, in
|
||||
static bool afs_lookup_filldir(struct dir_context *ctx, const char *name, int nlen,
|
||||
loff_t fpos, u64 ino, unsigned dtype);
|
||||
static int afs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl);
|
||||
struct dentry *dentry, umode_t mode);
|
||||
static struct dentry *afs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode);
|
||||
static int afs_rmdir(struct inode *dir, struct dentry *dentry);
|
||||
@@ -1623,7 +1623,7 @@ static const struct afs_operation_ops afs_create_operation = {
|
||||
* create a regular file on an AFS filesystem
|
||||
*/
|
||||
static int afs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct afs_operation *op;
|
||||
struct afs_vnode *dvnode = AFS_FS_I(dir);
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ static const struct file_operations bad_file_ops =
|
||||
|
||||
static int bad_inode_create(struct mnt_idmap *idmap,
|
||||
struct inode *dir, struct dentry *dentry,
|
||||
umode_t mode, bool excl)
|
||||
umode_t mode)
|
||||
{
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
+1
-1
@@ -83,7 +83,7 @@ const struct file_operations bfs_dir_operations = {
|
||||
};
|
||||
|
||||
static int bfs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
int err;
|
||||
struct inode *inode;
|
||||
|
||||
+1
-1
@@ -6832,7 +6832,7 @@ static int btrfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
|
||||
}
|
||||
|
||||
static int btrfs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
|
||||
+1
-1
@@ -978,7 +978,7 @@ out:
|
||||
}
|
||||
|
||||
static int ceph_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
return ceph_mknod(idmap, dir, dentry, mode, 0);
|
||||
}
|
||||
|
||||
+1
-1
@@ -134,7 +134,7 @@ static inline void coda_dir_drop_nlink(struct inode *dir)
|
||||
|
||||
/* creation routines: create, mknod, mkdir, link, symlink */
|
||||
static int coda_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *de, umode_t mode, bool excl)
|
||||
struct dentry *de, umode_t mode)
|
||||
{
|
||||
int error;
|
||||
const char *name=de->d_name.name;
|
||||
|
||||
+1
-1
@@ -268,7 +268,7 @@ out:
|
||||
static int
|
||||
ecryptfs_create(struct mnt_idmap *idmap,
|
||||
struct inode *directory_inode, struct dentry *ecryptfs_dentry,
|
||||
umode_t mode, bool excl)
|
||||
umode_t mode)
|
||||
{
|
||||
struct inode *ecryptfs_inode;
|
||||
int rc;
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ static bool efivarfs_valid_name(const char *str, int len)
|
||||
}
|
||||
|
||||
static int efivarfs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct inode *inode = NULL;
|
||||
struct efivar_entry *var;
|
||||
|
||||
+1
-1
@@ -538,7 +538,7 @@ out:
|
||||
}
|
||||
|
||||
static int exfat_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct super_block *sb = dir->i_sb;
|
||||
struct inode *inode;
|
||||
|
||||
+1
-1
@@ -99,7 +99,7 @@ struct dentry *ext2_get_parent(struct dentry *child)
|
||||
*/
|
||||
static int ext2_create (struct mnt_idmap * idmap,
|
||||
struct inode * dir, struct dentry * dentry,
|
||||
umode_t mode, bool excl)
|
||||
umode_t mode)
|
||||
{
|
||||
struct inode *inode;
|
||||
int err;
|
||||
|
||||
+1
-1
@@ -2811,7 +2811,7 @@ static int ext4_add_nondir(handle_t *handle,
|
||||
* with d_instantiate().
|
||||
*/
|
||||
static int ext4_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
handle_t *handle;
|
||||
struct inode *inode;
|
||||
|
||||
+1
-1
@@ -366,7 +366,7 @@ fail_drop:
|
||||
}
|
||||
|
||||
static int f2fs_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
|
||||
struct f2fs_lock_context lc;
|
||||
|
||||
@@ -262,7 +262,7 @@ static int msdos_add_entry(struct inode *dir, const unsigned char *name,
|
||||
|
||||
/***** Create a file */
|
||||
static int msdos_create(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode, bool excl)
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
struct super_block *sb = dir->i_sb;
|
||||
struct inode *inode = NULL;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user