Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a267f8d authored by Namjae Jeon's avatar Namjae Jeon Committed by Jaegeuk Kim
Browse files

f2fs: return proper error from start_gc_thread



when there is an error from kthread_run, then return proper error
rather than returning -ENOMEM.

Signed-off-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: default avatarAmit Sahrawat <a.sahrawat@samsung.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
parent a06a2416
Loading
Loading
Loading
Loading
+10 −5
Original line number Original line Diff line number Diff line
@@ -91,23 +91,28 @@ int start_gc_thread(struct f2fs_sb_info *sbi)
{
{
	struct f2fs_gc_kthread *gc_th;
	struct f2fs_gc_kthread *gc_th;
	dev_t dev = sbi->sb->s_bdev->bd_dev;
	dev_t dev = sbi->sb->s_bdev->bd_dev;
	int err = 0;


	if (!test_opt(sbi, BG_GC))
	if (!test_opt(sbi, BG_GC))
		return 0;
		goto out;
	gc_th = kmalloc(sizeof(struct f2fs_gc_kthread), GFP_KERNEL);
	gc_th = kmalloc(sizeof(struct f2fs_gc_kthread), GFP_KERNEL);
	if (!gc_th)
	if (!gc_th) {
		return -ENOMEM;
		err = -ENOMEM;
		goto out;
	}


	sbi->gc_thread = gc_th;
	sbi->gc_thread = gc_th;
	init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head);
	init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head);
	sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi,
	sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi,
			"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
			"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
	if (IS_ERR(gc_th->f2fs_gc_task)) {
	if (IS_ERR(gc_th->f2fs_gc_task)) {
		err = PTR_ERR(gc_th->f2fs_gc_task);
		kfree(gc_th);
		kfree(gc_th);
		sbi->gc_thread = NULL;
		sbi->gc_thread = NULL;
		return -ENOMEM;
	}
	}
	return 0;

out:
	return err;
}
}


void stop_gc_thread(struct f2fs_sb_info *sbi)
void stop_gc_thread(struct f2fs_sb_info *sbi)