From: "Sungjong Seo" <sj1557.seo@samsung.com>
To: "'Tetsuhiro Kohada'" <kohada.t2@gmail.com>
Cc: <kohada.tetsuhiro@dc.mitsubishielectric.co.jp>,
<mori.takahiro@ab.mitsubishielectric.co.jp>,
"'Namjae Jeon'" <namjae.jeon@samsung.com>,
<linux-fsdevel@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v2] exfat: remove 'rwoffset' in exfat_inode_info
Date: Fri, 25 Sep 2020 09:58:08 +0900 [thread overview]
Message-ID: <716101d692d6$ef1dc2d0$cd594870$@samsung.com> (raw)
In-Reply-To: <20200917013916.4523-1-kohada.t2@gmail.com>
> Remove 'rwoffset' in exfat_inode_info and replace it with the parameter of
> exfat_readdir().
> Since rwoffset is referenced only by exfat_readdir(), it is not necessary
> a exfat_inode_info's member.
> Also, change cpos to point to the next of entry-set, and return the index
> of dir-entry via dir_entry->entry.
>
> Signed-off-by: Tetsuhiro Kohada <kohada.t2@gmail.com>
Acked-by: Sungjong Seo <sj1557.seo@samsung.com>
> ---
> Changes in v2
> - 'cpos' point to the next of entry-set
> - return the index of dir-entry via dir_entry->entry
> - fix commit-message
>
> fs/exfat/dir.c | 21 +++++++++------------
> fs/exfat/exfat_fs.h | 2 --
> fs/exfat/file.c | 2 --
> fs/exfat/inode.c | 3 ---
> fs/exfat/super.c | 1 -
> 5 files changed, 9 insertions(+), 20 deletions(-)
>
> diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c index
> a9b13ae3f325..82bee625549d 100644
> --- a/fs/exfat/dir.c
> +++ b/fs/exfat/dir.c
> @@ -59,9 +59,9 @@ static void exfat_get_uniname_from_ext_entry(struct
> super_block *sb, }
>
> /* read a directory entry from the opened directory */ -static int
> exfat_readdir(struct inode *inode, struct exfat_dir_entry *dir_entry)
> +static int exfat_readdir(struct inode *inode, loff_t *cpos, struct
> +exfat_dir_entry *dir_entry)
> {
> - int i, dentries_per_clu, dentries_per_clu_bits = 0;
> + int i, dentries_per_clu, dentries_per_clu_bits = 0, num_ext;
> unsigned int type, clu_offset;
> sector_t sector;
> struct exfat_chain dir, clu;
> @@ -70,7 +70,7 @@ static int exfat_readdir(struct inode *inode, struct
> exfat_dir_entry *dir_entry)
> struct super_block *sb = inode->i_sb;
> struct exfat_sb_info *sbi = EXFAT_SB(sb);
> struct exfat_inode_info *ei = EXFAT_I(inode);
> - unsigned int dentry = ei->rwoffset & 0xFFFFFFFF;
> + unsigned int dentry = EXFAT_B_TO_DEN(*cpos) & 0xFFFFFFFF;
> struct buffer_head *bh;
>
> /* check if the given file ID is opened */ @@ -127,6 +127,7 @@
> static int exfat_readdir(struct inode *inode, struct exfat_dir_entry
> *dir_entry)
> continue;
> }
>
> + num_ext = ep->dentry.file.num_ext;
> dir_entry->attr = le16_to_cpu(ep->dentry.file.attr);
> exfat_get_entry_time(sbi, &dir_entry->crtime,
> ep->dentry.file.create_tz,
> @@ -157,12 +158,13 @@ static int exfat_readdir(struct inode *inode, struct
> exfat_dir_entry *dir_entry)
> return -EIO;
> dir_entry->size =
> le64_to_cpu(ep->dentry.stream.valid_size);
> + dir_entry->entry = dentry;
> brelse(bh);
>
> ei->hint_bmap.off = dentry >> dentries_per_clu_bits;
> ei->hint_bmap.clu = clu.dir;
>
> - ei->rwoffset = ++dentry;
> + *cpos = EXFAT_DEN_TO_B(dentry + 1 + num_ext);
> return 0;
> }
>
> @@ -178,7 +180,7 @@ static int exfat_readdir(struct inode *inode, struct
> exfat_dir_entry *dir_entry)
> }
>
> dir_entry->namebuf.lfn[0] = '\0';
> - ei->rwoffset = dentry;
> + *cpos = EXFAT_DEN_TO_B(dentry);
> return 0;
> }
>
> @@ -242,12 +244,10 @@ static int exfat_iterate(struct file *filp, struct
> dir_context *ctx)
> if (err)
> goto unlock;
> get_new:
> - ei->rwoffset = EXFAT_B_TO_DEN(cpos);
> -
> if (cpos >= i_size_read(inode))
> goto end_of_dir;
>
> - err = exfat_readdir(inode, &de);
> + err = exfat_readdir(inode, &cpos, &de);
> if (err) {
> /*
> * At least we tried to read a sector. Move cpos to next
> sector @@ -262,13 +262,10 @@ static int exfat_iterate(struct file *filp,
> struct dir_context *ctx)
> goto end_of_dir;
> }
>
> - cpos = EXFAT_DEN_TO_B(ei->rwoffset);
> -
> if (!nb->lfn[0])
> goto end_of_dir;
>
> - i_pos = ((loff_t)ei->start_clu << 32) |
> - ((ei->rwoffset - 1) & 0xffffffff);
> + i_pos = ((loff_t)ei->start_clu << 32) | (de.entry & 0xffffffff);
> tmp = exfat_iget(sb, i_pos);
> if (tmp) {
> inum = tmp->i_ino;
> diff --git a/fs/exfat/exfat_fs.h b/fs/exfat/exfat_fs.h index
> 44dc04520175..e586daf5a2e7 100644
> --- a/fs/exfat/exfat_fs.h
> +++ b/fs/exfat/exfat_fs.h
> @@ -263,8 +263,6 @@ struct exfat_inode_info {
> * the validation of hint_stat.
> */
> unsigned int version;
> - /* file offset or dentry index for readdir */
> - loff_t rwoffset;
>
> /* hint for cluster last accessed */
> struct exfat_hint hint_bmap;
> diff --git a/fs/exfat/file.c b/fs/exfat/file.c index
> 4831a39632a1..a92478eabfa4 100644
> --- a/fs/exfat/file.c
> +++ b/fs/exfat/file.c
> @@ -208,8 +208,6 @@ int __exfat_truncate(struct inode *inode, loff_t
> new_size)
> /* hint information */
> ei->hint_bmap.off = EXFAT_EOF_CLUSTER;
> ei->hint_bmap.clu = EXFAT_EOF_CLUSTER;
> - if (ei->rwoffset > new_size)
> - ei->rwoffset = new_size;
>
> /* hint_stat will be used if this is directory. */
> ei->hint_stat.eidx = 0;
> diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c index
> 7f90204adef5..70a33d4807c3 100644
> --- a/fs/exfat/inode.c
> +++ b/fs/exfat/inode.c
> @@ -114,8 +114,6 @@ static int exfat_map_cluster(struct inode *inode,
> unsigned int clu_offset,
> unsigned int local_clu_offset = clu_offset;
> unsigned int num_to_be_allocated = 0, num_clusters = 0;
>
> - ei->rwoffset = EXFAT_CLU_TO_B(clu_offset, sbi);
> -
> if (EXFAT_I(inode)->i_size_ondisk > 0)
> num_clusters =
>
EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk,
> @@ -567,7 +565,6 @@ static int exfat_fill_inode(struct inode *inode,
> struct exfat_dir_entry *info)
> ei->hint_stat.eidx = 0;
> ei->hint_stat.clu = info->start_clu;
> ei->hint_femp.eidx = EXFAT_HINT_NONE;
> - ei->rwoffset = 0;
> ei->hint_bmap.off = EXFAT_EOF_CLUSTER;
> ei->i_pos = 0;
>
> diff --git a/fs/exfat/super.c b/fs/exfat/super.c index
> 3b6a1659892f..b29935a91b9b 100644
> --- a/fs/exfat/super.c
> +++ b/fs/exfat/super.c
> @@ -342,7 +342,6 @@ static int exfat_read_root(struct inode *inode)
> ei->flags = ALLOC_FAT_CHAIN;
> ei->type = TYPE_DIR;
> ei->version = 0;
> - ei->rwoffset = 0;
> ei->hint_bmap.off = EXFAT_EOF_CLUSTER;
> ei->hint_stat.eidx = 0;
> ei->hint_stat.clu = sbi->root_dir;
> --
> 2.25.1
next prev parent reply other threads:[~2020-09-25 1:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20200917014010epcas1p335c9ba540cd41ff9bf6b0ce2e39d7519@epcas1p3.samsung.com>
2020-09-17 1:39 ` [PATCH v2] exfat: remove 'rwoffset' in exfat_inode_info Tetsuhiro Kohada
2020-09-25 0:58 ` Sungjong Seo [this message]
2020-09-25 7:17 ` Namjae Jeon
2020-09-17 20:14 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='716101d692d6$ef1dc2d0$cd594870$@samsung.com' \
--to=sj1557.seo@samsung.com \
--cc=kohada.t2@gmail.com \
--cc=kohada.tetsuhiro@dc.mitsubishielectric.co.jp \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mori.takahiro@ab.mitsubishielectric.co.jp \
--cc=namjae.jeon@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.