diff options
author | Namjae Jeon <namjae.jeon@samsung.com> | 2013-05-25 22:05:32 -0400 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2013-05-28 02:03:05 -0400 |
commit | 7a267f8d7463346a139e49c8beac1b8bfe32ef97 (patch) | |
tree | eb5224fef266b4280dcb6d3411de524b8594840e /fs/f2fs/gc.c | |
parent | a06a2416038d317a6430e453f5bc5fd81834554d (diff) |
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>
Diffstat (limited to 'fs/f2fs/gc.c')
-rw-r--r-- | fs/f2fs/gc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 25b083c81d50..ddc2c6750eee 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c | |||
@@ -91,23 +91,28 @@ int start_gc_thread(struct f2fs_sb_info *sbi) | |||
91 | { | 91 | { |
92 | struct f2fs_gc_kthread *gc_th; | 92 | struct f2fs_gc_kthread *gc_th; |
93 | dev_t dev = sbi->sb->s_bdev->bd_dev; | 93 | dev_t dev = sbi->sb->s_bdev->bd_dev; |
94 | int err = 0; | ||
94 | 95 | ||
95 | if (!test_opt(sbi, BG_GC)) | 96 | if (!test_opt(sbi, BG_GC)) |
96 | return 0; | 97 | goto out; |
97 | gc_th = kmalloc(sizeof(struct f2fs_gc_kthread), GFP_KERNEL); | 98 | gc_th = kmalloc(sizeof(struct f2fs_gc_kthread), GFP_KERNEL); |
98 | if (!gc_th) | 99 | if (!gc_th) { |
99 | return -ENOMEM; | 100 | err = -ENOMEM; |
101 | goto out; | ||
102 | } | ||
100 | 103 | ||
101 | sbi->gc_thread = gc_th; | 104 | sbi->gc_thread = gc_th; |
102 | init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head); | 105 | init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head); |
103 | sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi, | 106 | sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi, |
104 | "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); | 107 | "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); |
105 | if (IS_ERR(gc_th->f2fs_gc_task)) { | 108 | if (IS_ERR(gc_th->f2fs_gc_task)) { |
109 | err = PTR_ERR(gc_th->f2fs_gc_task); | ||
106 | kfree(gc_th); | 110 | kfree(gc_th); |
107 | sbi->gc_thread = NULL; | 111 | sbi->gc_thread = NULL; |
108 | return -ENOMEM; | ||
109 | } | 112 | } |
110 | return 0; | 113 | |
114 | out: | ||
115 | return err; | ||
111 | } | 116 | } |
112 | 117 | ||
113 | void stop_gc_thread(struct f2fs_sb_info *sbi) | 118 | void stop_gc_thread(struct f2fs_sb_info *sbi) |