diff options
| author | Linus Torvalds <[email protected]> | 2020-08-06 19:28:26 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2020-08-06 19:28:26 -0700 | 
| commit | 09e70bb4d89f727bafa6349155e08ce6ac0d8d9f (patch) | |
| tree | 045bb29c77c089e44acd41db6f76a9ee8365c666 /fs/ext2/dir.c | |
| parent | 019c407c1dfb81c37036323597e18cce73c84122 (diff) | |
| parent | 9436fb4d899333f612e051a6940af52028f7168b (diff) | |
Merge tag 'for_v5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull ext2, udf, reiserfs, quota cleanups and minor fixes from Jan Kara:
 "A few ext2 fixups and then several (mostly comment and documentation)
  cleanups in ext2, udf, reiserfs, and quota"
* tag 'for_v5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  reiserfs: delete duplicated words
  udf: osta_udf.h: delete a duplicated word
  reiserfs: reiserfs.h: delete a duplicated word
  ext2: ext2.h: fix duplicated word + typos
  udf: Replace HTTP links with HTTPS ones
  quota: Fixup http links in quota doc
  Replace HTTP links with HTTPS ones: DISKQUOTA
  ext2: initialize quota info in ext2_xattr_set()
  ext2: fix some incorrect comments in inode.c
  ext2: remove nocheck option
  ext2: fix missing percpu_counter_inc
  ext2: ext2_find_entry() return -ENOENT if no entry found
  ext2: propagate errors up to ext2_find_entry()'s callers
  ext2: fix improper assignment for e_value_offs
Diffstat (limited to 'fs/ext2/dir.c')
| -rw-r--r-- | fs/ext2/dir.c | 55 | 
1 files changed, 27 insertions, 28 deletions
| diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c index 13318e255ebf..70355ab6740e 100644 --- a/fs/ext2/dir.c +++ b/fs/ext2/dir.c @@ -348,7 +348,6 @@ struct ext2_dir_entry_2 *ext2_find_entry (struct inode *dir,  	struct page *page = NULL;  	struct ext2_inode_info *ei = EXT2_I(dir);  	ext2_dirent * de; -	int dir_has_error = 0;  	if (npages == 0)  		goto out; @@ -362,25 +361,25 @@ struct ext2_dir_entry_2 *ext2_find_entry (struct inode *dir,  	n = start;  	do {  		char *kaddr; -		page = ext2_get_page(dir, n, dir_has_error); -		if (!IS_ERR(page)) { -			kaddr = page_address(page); -			de = (ext2_dirent *) kaddr; -			kaddr += ext2_last_byte(dir, n) - reclen; -			while ((char *) de <= kaddr) { -				if (de->rec_len == 0) { -					ext2_error(dir->i_sb, __func__, -						"zero-length directory entry"); -					ext2_put_page(page); -					goto out; -				} -				if (ext2_match (namelen, name, de)) -					goto found; -				de = ext2_next_entry(de); +		page = ext2_get_page(dir, n, 0); +		if (IS_ERR(page)) +			return ERR_CAST(page); + +		kaddr = page_address(page); +		de = (ext2_dirent *) kaddr; +		kaddr += ext2_last_byte(dir, n) - reclen; +		while ((char *) de <= kaddr) { +			if (de->rec_len == 0) { +				ext2_error(dir->i_sb, __func__, +					"zero-length directory entry"); +				ext2_put_page(page); +				goto out;  			} -			ext2_put_page(page); -		} else -			dir_has_error = 1; +			if (ext2_match(namelen, name, de)) +				goto found; +			de = ext2_next_entry(de); +		} +		ext2_put_page(page);  		if (++n >= npages)  			n = 0; @@ -394,7 +393,7 @@ struct ext2_dir_entry_2 *ext2_find_entry (struct inode *dir,  		}  	} while (n != start);  out: -	return NULL; +	return ERR_PTR(-ENOENT);  found:  	*res_page = page; @@ -414,18 +413,18 @@ struct ext2_dir_entry_2 * ext2_dotdot (struct inode *dir, struct page **p)  	return de;  } -ino_t ext2_inode_by_name(struct inode *dir, const struct qstr *child) +int ext2_inode_by_name(struct inode *dir, const struct qstr *child, ino_t *ino)  { -	ino_t res = 0;  	struct ext2_dir_entry_2 *de;  	struct page *page; -	de = ext2_find_entry (dir, child, &page); -	if (de) { -		res = le32_to_cpu(de->inode); -		ext2_put_page(page); -	} -	return res; +	de = ext2_find_entry(dir, child, &page); +	if (IS_ERR(de)) +		return PTR_ERR(de); + +	*ino = le32_to_cpu(de->inode); +	ext2_put_page(page); +	return 0;  }  static int ext2_prepare_chunk(struct page *page, loff_t pos, unsigned len) |