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: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
parent
a06a241603
commit
7a267f8d74
15
fs/f2fs/gc.c
15
fs/f2fs/gc.c
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user