2018-12-18 02:16:56

by Jaegeuk Kim

[permalink] [raw]
Subject: [PATCH] f2fs: fix missing unlock(sbi->gc_mutex)

This fixes missing unlock call.

Cc: <[email protected]>
Signed-off-by: Jaegeuk Kim <[email protected]>
---
fs/f2fs/super.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index b79677639108..2689a2cb56cc 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1462,6 +1462,9 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)

while (!f2fs_time_over(sbi, DISABLE_TIME)) {
err = f2fs_gc(sbi, true, false, NULL_SEGNO);
+
+ /* f2fs_gc guarantees unlock gc_mutex */
+ mutex_lock(&sbi->gc_mutex);
if (err == -ENODATA)
break;
if (err && err != -EAGAIN) {
--
2.19.0.605.g01d371f741-goog



2018-12-18 10:35:07

by Chao Yu

[permalink] [raw]
Subject: Re: [f2fs-dev] [PATCH] f2fs: fix missing unlock(sbi->gc_mutex)

On 2018/12/18 10:15, Jaegeuk Kim wrote:
> This fixes missing unlock call.
>
> Cc: <[email protected]>
> Signed-off-by: Jaegeuk Kim <[email protected]>
> ---
> fs/f2fs/super.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index b79677639108..2689a2cb56cc 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -1462,6 +1462,9 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>
> while (!f2fs_time_over(sbi, DISABLE_TIME)) {
> err = f2fs_gc(sbi, true, false, NULL_SEGNO);
> +
> + /* f2fs_gc guarantees unlock gc_mutex */

How about:

while () {
mutex_lock(&sbi->gc_mutex);
err = f2fs_gc();
if (err) {
handle error cases..
}
}

Thanks,

> + mutex_lock(&sbi->gc_mutex);
> if (err == -ENODATA)
> break;
> if (err && err != -EAGAIN) {
>


2018-12-18 23:51:00

by Jaegeuk Kim

[permalink] [raw]
Subject: Re: [PATCH v2] f2fs: fix missing unlock(sbi->gc_mutex)

This fixes missing unlock call.

Cc: <[email protected]>
Signed-off-by: Jaegeuk Kim <[email protected]>
---

v1 -> v2:
- clean up

fs/f2fs/super.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index b79677639108..cec7ef27b389 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1457,19 +1457,16 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)

sbi->sb->s_flags |= SB_ACTIVE;

- mutex_lock(&sbi->gc_mutex);
f2fs_update_time(sbi, DISABLE_TIME);

while (!f2fs_time_over(sbi, DISABLE_TIME)) {
+ mutex_lock(&sbi->gc_mutex);
err = f2fs_gc(sbi, true, false, NULL_SEGNO);
if (err == -ENODATA)
break;
- if (err && err != -EAGAIN) {
- mutex_unlock(&sbi->gc_mutex);
+ if (err && err != -EAGAIN)
return err;
- }
}
- mutex_unlock(&sbi->gc_mutex);

err = sync_filesystem(sbi->sb);
if (err)
--
2.19.0.605.g01d371f741-goog


2018-12-19 04:25:00

by Chao Yu

[permalink] [raw]
Subject: Re: [f2fs-dev] [PATCH v2] f2fs: fix missing unlock(sbi->gc_mutex)

On 2018/12/19 7:22, Jaegeuk Kim wrote:
> This fixes missing unlock call.
>
> Cc: <[email protected]>
> Signed-off-by: Jaegeuk Kim <[email protected]>

Looks good to me now. :)

Reviewed-by: Chao Yu <[email protected]>

Thanks,