aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorNamjae Jeon <namjae.jeon@samsung.com>2013-05-25 22:05:32 -0400
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-05-28 02:03:05 -0400
commit7a267f8d7463346a139e49c8beac1b8bfe32ef97 (patch)
treeeb5224fef266b4280dcb6d3411de524b8594840e /fs
parenta06a2416038d317a6430e453f5bc5fd81834554d (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')
-rw-r--r--fs/f2fs/gc.c15
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
114out:
115 return err;
111} 116}
112 117
113void stop_gc_thread(struct f2fs_sb_info *sbi) 118void stop_gc_thread(struct f2fs_sb_info *sbi)