Commit 821a99b7 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Switch to .iterate_shared for readdir

We definitely don't need an exclusive inode lock for readdir.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 05240ba6
...@@ -367,12 +367,12 @@ static struct dentry *bch2_lookup(struct inode *vdir, struct dentry *dentry, ...@@ -367,12 +367,12 @@ static struct dentry *bch2_lookup(struct inode *vdir, struct dentry *dentry,
return d_splice_alias(vinode, dentry); return d_splice_alias(vinode, dentry);
} }
static int bch2_create(struct mnt_idmap *idmap, static int bch2_mknod(struct mnt_idmap *idmap,
struct inode *vdir, struct dentry *dentry, struct inode *vdir, struct dentry *dentry,
umode_t mode, bool excl) umode_t mode, dev_t rdev)
{ {
struct bch_inode_info *inode = struct bch_inode_info *inode =
__bch2_create(idmap, to_bch_ei(vdir), dentry, mode|S_IFREG, 0, false); __bch2_create(idmap, to_bch_ei(vdir), dentry, mode, rdev, false);
if (IS_ERR(inode)) if (IS_ERR(inode))
return PTR_ERR(inode); return PTR_ERR(inode);
...@@ -381,6 +381,13 @@ static int bch2_create(struct mnt_idmap *idmap, ...@@ -381,6 +381,13 @@ static int bch2_create(struct mnt_idmap *idmap,
return 0; return 0;
} }
static int bch2_create(struct mnt_idmap *idmap,
struct inode *vdir, struct dentry *dentry,
umode_t mode, bool excl)
{
return bch2_mknod(idmap, vdir, dentry, mode|S_IFREG, 0);
}
static int __bch2_link(struct bch_fs *c, static int __bch2_link(struct bch_fs *c,
struct bch_inode_info *inode, struct bch_inode_info *inode,
struct bch_inode_info *dir, struct bch_inode_info *dir,
...@@ -512,33 +519,7 @@ static int bch2_symlink(struct mnt_idmap *idmap, ...@@ -512,33 +519,7 @@ static int bch2_symlink(struct mnt_idmap *idmap,
static int bch2_mkdir(struct mnt_idmap *idmap, static int bch2_mkdir(struct mnt_idmap *idmap,
struct inode *vdir, struct dentry *dentry, umode_t mode) struct inode *vdir, struct dentry *dentry, umode_t mode)
{ {
struct bch_inode_info *inode = return bch2_mknod(idmap, vdir, dentry, mode|S_IFDIR, 0);
__bch2_create(idmap, to_bch_ei(vdir), dentry, mode|S_IFDIR, 0, false);
if (IS_ERR(inode))
return PTR_ERR(inode);
d_instantiate(dentry, &inode->v);
return 0;
}
static int bch2_rmdir(struct inode *vdir, struct dentry *dentry)
{
return bch2_unlink(vdir, dentry);
}
static int bch2_mknod(struct mnt_idmap *idmap,
struct inode *vdir, struct dentry *dentry,
umode_t mode, dev_t rdev)
{
struct bch_inode_info *inode =
__bch2_create(idmap, to_bch_ei(vdir), dentry, mode, rdev, false);
if (IS_ERR(inode))
return PTR_ERR(inode);
d_instantiate(dentry, &inode->v);
return 0;
} }
static int bch2_rename2(struct mnt_idmap *idmap, static int bch2_rename2(struct mnt_idmap *idmap,
...@@ -1034,7 +1015,7 @@ static const struct inode_operations bch_dir_inode_operations = { ...@@ -1034,7 +1015,7 @@ static const struct inode_operations bch_dir_inode_operations = {
.unlink = bch2_unlink, .unlink = bch2_unlink,
.symlink = bch2_symlink, .symlink = bch2_symlink,
.mkdir = bch2_mkdir, .mkdir = bch2_mkdir,
.rmdir = bch2_rmdir, .rmdir = bch2_unlink,
.mknod = bch2_mknod, .mknod = bch2_mknod,
.rename = bch2_rename2, .rename = bch2_rename2,
.getattr = bch2_getattr, .getattr = bch2_getattr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment