summaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorChao Yu <yuchao0@huawei.com>2017-02-24 22:08:28 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2017-02-27 12:59:55 -0500
commit55523519bc7227e651fd4febeb3aafdd22b8af1c (patch)
tree967a79ab5559dc46d191812ef50aa5a8d144ec78 /fs/f2fs
parentdd7b2333e6cd31584682382fcf0a1c1e5140b936 (diff)
f2fs: show simple call stack in fault injection message
Previously kernel message can show that in which function we do the injection, but unfortunately, most of the caller are the same, for tracking more information of injection path, it needs to show upper caller's name. This patch supports that ability. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs')
-rw-r--r--fs/f2fs/checkpoint.c1
-rw-r--r--fs/f2fs/data.c4
-rw-r--r--fs/f2fs/dir.c4
-rw-r--r--fs/f2fs/f2fs.h20
-rw-r--r--fs/f2fs/gc.c4
-rw-r--r--fs/f2fs/inode.c4
-rw-r--r--fs/f2fs/node.c4
-rw-r--r--fs/f2fs/segment.c4
8 files changed, 32 insertions, 13 deletions
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index cd7132121573..04d7c244c0f0 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -494,6 +494,7 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
494#ifdef CONFIG_F2FS_FAULT_INJECTION 494#ifdef CONFIG_F2FS_FAULT_INJECTION
495 if (time_to_inject(sbi, FAULT_ORPHAN)) { 495 if (time_to_inject(sbi, FAULT_ORPHAN)) {
496 spin_unlock(&im->ino_lock); 496 spin_unlock(&im->ino_lock);
497 f2fs_show_injection_info(FAULT_ORPHAN);
497 return -ENOSPC; 498 return -ENOSPC;
498 } 499 }
499#endif 500#endif
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 9e51c5e40ce1..b0a2e3faabb2 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -55,8 +55,10 @@ static void f2fs_read_end_io(struct bio *bio)
55 int i; 55 int i;
56 56
57#ifdef CONFIG_F2FS_FAULT_INJECTION 57#ifdef CONFIG_F2FS_FAULT_INJECTION
58 if (time_to_inject(F2FS_P_SB(bio->bi_io_vec->bv_page), FAULT_IO)) 58 if (time_to_inject(F2FS_P_SB(bio->bi_io_vec->bv_page), FAULT_IO)) {
59 f2fs_show_injection_info(FAULT_IO);
59 bio->bi_error = -EIO; 60 bio->bi_error = -EIO;
61 }
60#endif 62#endif
61 63
62 if (f2fs_bio_encrypted(bio)) { 64 if (f2fs_bio_encrypted(bio)) {
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 54aa30ee028f..295a223ae11e 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -549,8 +549,10 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
549 549
550start: 550start:
551#ifdef CONFIG_F2FS_FAULT_INJECTION 551#ifdef CONFIG_F2FS_FAULT_INJECTION
552 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) 552 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) {
553 f2fs_show_injection_info(FAULT_DIR_DEPTH);
553 return -ENOSPC; 554 return -ENOSPC;
555 }
554#endif 556#endif
555 if (unlikely(current_depth == MAX_DIR_HASH_DEPTH)) 557 if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
556 return -ENOSPC; 558 return -ENOSPC;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index d1156cdd211e..8c0916ae0bea 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -952,6 +952,10 @@ struct f2fs_sb_info {
952}; 952};
953 953
954#ifdef CONFIG_F2FS_FAULT_INJECTION 954#ifdef CONFIG_F2FS_FAULT_INJECTION
955#define f2fs_show_injection_info(type) \
956 printk("%sF2FS-fs : inject %s in %s of %pF\n", \
957 KERN_INFO, fault_name[type], \
958 __func__, __builtin_return_address(0))
955static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) 959static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
956{ 960{
957 struct f2fs_fault_info *ffi = &sbi->fault_info; 961 struct f2fs_fault_info *ffi = &sbi->fault_info;
@@ -965,10 +969,6 @@ static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
965 atomic_inc(&ffi->inject_ops); 969 atomic_inc(&ffi->inject_ops);
966 if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) { 970 if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) {
967 atomic_set(&ffi->inject_ops, 0); 971 atomic_set(&ffi->inject_ops, 0);
968 printk("%sF2FS-fs : inject %s in %pF\n",
969 KERN_INFO,
970 fault_name[type],
971 __builtin_return_address(0));
972 return true; 972 return true;
973 } 973 }
974 return false; 974 return false;
@@ -1277,8 +1277,10 @@ static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi,
1277 blkcnt_t diff; 1277 blkcnt_t diff;
1278 1278
1279#ifdef CONFIG_F2FS_FAULT_INJECTION 1279#ifdef CONFIG_F2FS_FAULT_INJECTION
1280 if (time_to_inject(sbi, FAULT_BLOCK)) 1280 if (time_to_inject(sbi, FAULT_BLOCK)) {
1281 f2fs_show_injection_info(FAULT_BLOCK);
1281 return false; 1282 return false;
1283 }
1282#endif 1284#endif
1283 /* 1285 /*
1284 * let's increase this in prior to actual block count change in order 1286 * let's increase this in prior to actual block count change in order
@@ -1518,8 +1520,10 @@ static inline struct page *f2fs_grab_cache_page(struct address_space *mapping,
1518 if (page) 1520 if (page)
1519 return page; 1521 return page;
1520 1522
1521 if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) 1523 if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) {
1524 f2fs_show_injection_info(FAULT_PAGE_ALLOC);
1522 return NULL; 1525 return NULL;
1526 }
1523#endif 1527#endif
1524 if (!for_write) 1528 if (!for_write)
1525 return grab_cache_page(mapping, index); 1529 return grab_cache_page(mapping, index);
@@ -1995,8 +1999,10 @@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
1995 size_t size, gfp_t flags) 1999 size_t size, gfp_t flags)
1996{ 2000{
1997#ifdef CONFIG_F2FS_FAULT_INJECTION 2001#ifdef CONFIG_F2FS_FAULT_INJECTION
1998 if (time_to_inject(sbi, FAULT_KMALLOC)) 2002 if (time_to_inject(sbi, FAULT_KMALLOC)) {
2003 f2fs_show_injection_info(FAULT_KMALLOC);
1999 return NULL; 2004 return NULL;
2005 }
2000#endif 2006#endif
2001 return kmalloc(size, flags); 2007 return kmalloc(size, flags);
2002} 2008}
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 6c996e39b59a..8be5144da8e6 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -48,8 +48,10 @@ static int gc_thread_func(void *data)
48 } 48 }
49 49
50#ifdef CONFIG_F2FS_FAULT_INJECTION 50#ifdef CONFIG_F2FS_FAULT_INJECTION
51 if (time_to_inject(sbi, FAULT_CHECKPOINT)) 51 if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
52 f2fs_show_injection_info(FAULT_CHECKPOINT);
52 f2fs_stop_checkpoint(sbi, false); 53 f2fs_stop_checkpoint(sbi, false);
54 }
53#endif 55#endif
54 56
55 /* 57 /*
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index af06bda51a54..24bb8213d974 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -373,8 +373,10 @@ void f2fs_evict_inode(struct inode *inode)
373 goto no_delete; 373 goto no_delete;
374 374
375#ifdef CONFIG_F2FS_FAULT_INJECTION 375#ifdef CONFIG_F2FS_FAULT_INJECTION
376 if (time_to_inject(sbi, FAULT_EVICT_INODE)) 376 if (time_to_inject(sbi, FAULT_EVICT_INODE)) {
377 f2fs_show_injection_info(FAULT_EVICT_INODE);
377 goto no_delete; 378 goto no_delete;
379 }
378#endif 380#endif
379 381
380 remove_ino_entry(sbi, inode->i_ino, APPEND_INO); 382 remove_ino_entry(sbi, inode->i_ino, APPEND_INO);
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 43d35ec11851..24ea49f98891 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1987,8 +1987,10 @@ bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid)
1987 struct free_nid *i = NULL; 1987 struct free_nid *i = NULL;
1988retry: 1988retry:
1989#ifdef CONFIG_F2FS_FAULT_INJECTION 1989#ifdef CONFIG_F2FS_FAULT_INJECTION
1990 if (time_to_inject(sbi, FAULT_ALLOC_NID)) 1990 if (time_to_inject(sbi, FAULT_ALLOC_NID)) {
1991 f2fs_show_injection_info(FAULT_ALLOC_NID);
1991 return false; 1992 return false;
1993 }
1992#endif 1994#endif
1993 spin_lock(&nm_i->nid_list_lock); 1995 spin_lock(&nm_i->nid_list_lock);
1994 1996
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 9eb6d89bf9e2..1bab09097590 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -352,8 +352,10 @@ int commit_inmem_pages(struct inode *inode)
352void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need) 352void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
353{ 353{
354#ifdef CONFIG_F2FS_FAULT_INJECTION 354#ifdef CONFIG_F2FS_FAULT_INJECTION
355 if (time_to_inject(sbi, FAULT_CHECKPOINT)) 355 if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
356 f2fs_show_injection_info(FAULT_CHECKPOINT);
356 f2fs_stop_checkpoint(sbi, false); 357 f2fs_stop_checkpoint(sbi, false);
358 }
357#endif 359#endif
358 360
359 if (!need) 361 if (!need)