diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2019-10-31 06:21:58 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2019-11-15 19:49:04 +0100 |
commit | 6c2d4798a8d16cf4f3a28c3cd4af4f1dcbbb4d04 (patch) | |
tree | 2b14c83985da30129911f7ad455e4cc587690e58 /fs/quota/dquot.c | |
parent | fs/namei.c: pull positivity check into follow_managed() (diff) | |
download | linux-6c2d4798a8d16cf4f3a28c3cd4af4f1dcbbb4d04.tar.xz linux-6c2d4798a8d16cf4f3a28c3cd4af4f1dcbbb4d04.zip |
new helper: lookup_positive_unlocked()
Most of the callers of lookup_one_len_unlocked() treat negatives are
ERR_PTR(-ENOENT). Provide a helper that would do just that. Note
that a pinned positive dentry remains positive - it's ->d_inode is
stable, etc.; a pinned _negative_ dentry can become positive at any
point as long as you are not holding its parent at least shared.
So using lookup_one_len_unlocked() needs to be careful;
lookup_positive_unlocked() is safer and that's what the callers
end up open-coding anyway.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/quota/dquot.c')
-rw-r--r-- | fs/quota/dquot.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 6e826b454082..a37e1b117721 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -2507,15 +2507,10 @@ int dquot_quota_on_mount(struct super_block *sb, char *qf_name, struct dentry *dentry; int error; - dentry = lookup_one_len_unlocked(qf_name, sb->s_root, strlen(qf_name)); + dentry = lookup_positive_unlocked(qf_name, sb->s_root, strlen(qf_name)); if (IS_ERR(dentry)) return PTR_ERR(dentry); - if (d_really_is_negative(dentry)) { - error = -ENOENT; - goto out; - } - error = security_quota_on(dentry); if (!error) error = vfs_load_quota_inode(d_inode(dentry), type, format_id, |