Re: [f2fs-dev] [PATCH 1/1] f2fs-toos:fsck.f2fs Fix bad return value

From: Jaegeuk Kim
Date: Wed Nov 04 2020 - 13:53:19 EST


On 11/04, Robin Hsu wrote:
> The root cause is the ASSERT() marco, In fact, I already fixed it in one
> of my recent work.
> I separate it as an independent commit here:
>
> >From 5359588b1804c5e555e9fad92203d76041ef09eb Mon Sep 17 00:00:00 2001
>
> From: Robin Hsu <robinhsu@xxxxxxxxxx>
>
> Date: Wed, 4 Nov 2020 10:50:28 +0800
>
> Subject: [PATCH] Fix ASSERT() macro with '%' in the expression
>
>
>
> Fix a compiling error triggered by ASSERT(exp), when exp contains '%'
>
> (e.g. integer modular operator)
>
>
>
> Signed-off-by: Robin Hsu <robinhsu@xxxxxxxxxx>
>
> Change-Id: I84708dbaf10c675b9950926c9b6ded5b5a3fbd59

Thanks, applied as well. :)

>
> ---
>
> include/f2fs_fs.h | 4 ++--
>
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>
>
> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
>
> index b5bda13..1348e39 100644
>
> --- a/include/f2fs_fs.h
>
> +++ b/include/f2fs_fs.h
>
> @@ -194,8 +194,8 @@ static inline uint64_t bswap_64(uint64_t val)
>
> #define ASSERT(exp) \
>
> do { \
>
> if (!(exp)) { \
>
> - printf("[ASSERT] (%s:%4d) " #exp"\n", \
>
> - __func__, __LINE__); \
>
> + printf("[ASSERT] (%s:%4d) %s\n", \
>
> + __func__, __LINE__, #exp); \
>
> exit(-1); \
>
> } \
>
> } while (0)
>
> --
>
> 2.29.1.341.ge80a0c044ae-goog
>
>
> On Tue, Nov 3, 2020 at 11:23 AM Jaegeuk Kim <jaegeuk@xxxxxxxxxx> wrote:
>
> > On 11/02, Eric Biggers wrote:
> > > On Mon, Oct 26, 2020 at 05:40:00PM +0800, Robin Hsu via Linux-f2fs-devel
> > wrote:
> > > > 'ret' should not have been used here: otherwise, it would be wrongly
> > used
> > > > as the error code and then be returned from main().
> > > >
> > > > Signed-off-by: Robin Hsu <robinhsu@xxxxxxxxxx>
> > > > ---
> > > > fsck/fsck.c | 3 +--
> > > > 1 file changed, 1 insertion(+), 2 deletions(-)
> > > >
> > > > diff --git a/fsck/fsck.c b/fsck/fsck.c
> > > > index f97e9fb..66e4e3f 100644
> > > > --- a/fsck/fsck.c
> > > > +++ b/fsck/fsck.c
> > > > @@ -3137,8 +3137,7 @@ int fsck_verify(struct f2fs_sb_info *sbi)
> > > > char ans[255] = {0};
> > > >
> > > > printf("\nDo you want to restore lost files into
> > ./lost_found/? [Y/N] ");
> > > > - ret = scanf("%s", ans);
> > > > - ASSERT(ret >= 0);
> > > > + ASSERT(scanf("%s", ans) >= 0);
> > > > if (!strcasecmp(ans, "y")) {
> > > > for (i = 0; i < fsck->nr_nat_entries; i++) {
> > > > if (f2fs_test_bit(i,
> > fsck->nat_area_bitmap))
> > >
> > > This patch causes a compiler warning:
> > >
> > > In file included from f2fs.h:33,
> > > from fsck.h:14,
> > > from fsck.c:11:
> > > fsck.c: In function 'fsck_verify':
> > > ../include/f2fs_fs.h:197:11: warning: format '%s' expects a
> > matching 'char *' argument [-Wformat=]
> > > printf("[ASSERT] (%s:%4d) " #exp"\n", \
> > > ^~~~~~~~~~~~~~~~~~~~
> > > fsck.c:3151:3: note: in expansion of macro 'ASSERT'
> > > ASSERT(scanf("%s", ans) >= 0);
> > > ^~~~~~
> >
> > Urg. Fixed by this.
> >
> > From c986140e3c5abb9eb7a08928a88acb8273f1bd52 Mon Sep 17 00:00:00 2001
> > From: Robin Hsu <robinhsu@xxxxxxxxxx>
> > Date: Mon, 26 Oct 2020 17:40:00 +0800
> > Subject: [PATCH] f2fs-toos: fsck.f2fs Fix bad return value
> >
> > 'ret' should not have been used here: otherwise, it would be wrongly used
> > as the error code and then be returned from main().
> >
> > Signed-off-by: Robin Hsu <robinhsu@xxxxxxxxxx>
> > Reviewed-by: Chao Yu <yuchao0@xxxxxxxxxx>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
> > ---
> > fsck/fsck.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/fsck/fsck.c b/fsck/fsck.c
> > index 647523397f3e..e52672032d2c 100644
> > --- a/fsck/fsck.c
> > +++ b/fsck/fsck.c
> > @@ -3146,10 +3146,11 @@ int fsck_verify(struct f2fs_sb_info *sbi)
> > #ifndef WITH_ANDROID
> > if (nr_unref_nid && !c.ro) {
> > char ans[255] = {0};
> > + int res;
> >
> > printf("\nDo you want to restore lost files into
> > ./lost_found/? [Y/N] ");
> > - ret = scanf("%s", ans);
> > - ASSERT(ret >= 0);
> > + res = scanf("%s", ans);
> > + ASSERT(res >= 0);
> > if (!strcasecmp(ans, "y")) {
> > for (i = 0; i < fsck->nr_nat_entries; i++) {
> > if (f2fs_test_bit(i,
> > fsck->nat_area_bitmap))
> > --
> > 2.29.1.341.ge80a0c044ae-goog
> >
> >