diff options
author | 2018-08-05 15:51:10 -0400 | |
---|---|---|
committer | 2018-08-05 15:51:10 -0400 | |
commit | 808aa6c5e34a25213bff4d80d3cdb588752879dd (patch) | |
tree | d6f71980570703d504cfbbc04332fe2052630e50 | |
parent | afs_try_auto_mntpt(): return NULL instead of ERR_PTR(-ENOENT) (diff) | |
parent | hpfs: fix an inode leak in lookup, switch to d_splice_alias() (diff) | |
download | wireguard-linux-808aa6c5e34a25213bff4d80d3cdb588752879dd.tar.xz wireguard-linux-808aa6c5e34a25213bff4d80d3cdb588752879dd.zip |
Merge branch 'work.hpfs' into work.lookup
-rw-r--r-- | fs/hpfs/dir.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/fs/hpfs/dir.c b/fs/hpfs/dir.c index c83ece7facc5..d85230c84ef2 100644 --- a/fs/hpfs/dir.c +++ b/fs/hpfs/dir.c @@ -244,6 +244,7 @@ struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, unsigned in result = iget_locked(dir->i_sb, ino); if (!result) { hpfs_error(dir->i_sb, "hpfs_lookup: can't get inode"); + result = ERR_PTR(-ENOMEM); goto bail1; } if (result->i_state & I_NEW) { @@ -266,6 +267,8 @@ struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, unsigned in if (de->has_acl || de->has_xtd_perm) if (!sb_rdonly(dir->i_sb)) { hpfs_error(result->i_sb, "ACLs or XPERM found. This is probably HPFS386. This driver doesn't support it now. Send me some info on these structures"); + iput(result); + result = ERR_PTR(-EINVAL); goto bail1; } @@ -301,29 +304,17 @@ struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, unsigned in } } +bail1: hpfs_brelse4(&qbh); /* * Made it. */ - end: - end_add: +end: +end_add: hpfs_unlock(dir->i_sb); - d_add(dentry, result); - return NULL; - - /* - * Didn't. - */ - bail1: - - hpfs_brelse4(&qbh); - - /*bail:*/ - - hpfs_unlock(dir->i_sb); - return ERR_PTR(-ENOENT); + return d_splice_alias(result, dentry); } const struct file_operations hpfs_dir_ops = |