> If the position is not aligned with the dentry size, the return > value of readdir() will be NULL and errno is 0, which means the > end of the directory stream is reached. > > If the position is aligned with dentry size, but there is no file > or directory at the position, exfat_readdir() will continue to > get dentry from the next dentry. So the dentry gotten by readdir() > may not be at the position. > > After this commit, if the position is not aligned with the dentry > size, round the position up to the dentry size and continue to get > the dentry. > > Fixes: ca06197382bd ("exfat: add directory operations") > > Signed-off-by: Yuezhang Mo <Yuezhang.Mo@xxxxxxxx> > Reviewed-by: Andy Wu <Andy.Wu@xxxxxxxx> > Reviewed-by: Aoyama Wataru <wataru.aoyama@xxxxxxxx> > Reported-by: Wang Yugui <wangyugui@xxxxxxxxxxxx> Looks good. Thanks. Reviewed-by: Sungjong Seo <sj1557.seo@xxxxxxxxxxx> > --- > fs/exfat/dir.c | 5 +---- > 1 file changed, 1 insertion(+), 4 deletions(-) > > diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c > index 1dfa67f307f1..1122bee3b634 100644 > --- a/fs/exfat/dir.c > +++ b/fs/exfat/dir.c > @@ -234,10 +234,7 @@ static int exfat_iterate(struct file *file, struct > dir_context *ctx) > fake_offset = 1; > } > > - if (cpos & (DENTRY_SIZE - 1)) { > - err = -ENOENT; > - goto unlock; > - } > + cpos = round_up(cpos, DENTRY_SIZE); > > /* name buffer should be allocated before use */ > err = exfat_alloc_namebuf(nb); > -- > 2.25.1