Commit cb78942b authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

f2fs: inject ENOSPC failures



This patch injects ENOSPC failures.

Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent c41f3cc3
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -474,6 +474,13 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
	int err = 0;

	spin_lock(&im->ino_lock);

#ifdef CONFIG_F2FS_FAULT_INJECTION
	if (time_to_inject(FAULT_ORPHAN)) {
		spin_unlock(&im->ino_lock);
		return -ENOSPC;
	}
#endif
	if (unlikely(im->ino_num >= sbi->max_orphans))
		err = -ENOSPC;
	else
+4 −0
Original line number Diff line number Diff line
@@ -537,6 +537,10 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
	}

start:
#ifdef CONFIG_F2FS_FAULT_INJECTION
	if (time_to_inject(FAULT_DIR_DEPTH))
		return -ENOSPC;
#endif
	if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
		return -ENOSPC;

+10 −0
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@
enum {
	FAULT_KMALLOC,
	FAULT_PAGE_ALLOC,
	FAULT_ALLOC_NID,
	FAULT_ORPHAN,
	FAULT_BLOCK,
	FAULT_DIR_DEPTH,
	FAULT_MAX,
};

@@ -1087,6 +1091,12 @@ static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi,
	block_t	valid_block_count;

	spin_lock(&sbi->stat_lock);
#ifdef CONFIG_F2FS_FAULT_INJECTION
	if (time_to_inject(FAULT_BLOCK)) {
		spin_unlock(&sbi->stat_lock);
		return false;
	}
#endif
	valid_block_count =
		sbi->total_valid_block_count + (block_t)count;
	if (unlikely(valid_block_count > sbi->user_block_count)) {
+4 −0
Original line number Diff line number Diff line
@@ -1838,6 +1838,10 @@ bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid)
	struct f2fs_nm_info *nm_i = NM_I(sbi);
	struct free_nid *i = NULL;
retry:
#ifdef CONFIG_F2FS_FAULT_INJECTION
	if (time_to_inject(FAULT_ALLOC_NID))
		return false;
#endif
	if (unlikely(sbi->total_valid_node_count + 1 > nm_i->available_nids))
		return false;

+4 −0
Original line number Diff line number Diff line
@@ -46,6 +46,10 @@ atomic_t f2fs_ops;
char *fault_name[FAULT_MAX] = {
	[FAULT_KMALLOC]		= "kmalloc",
	[FAULT_PAGE_ALLOC]	= "page alloc",
	[FAULT_ALLOC_NID]	= "alloc nid",
	[FAULT_ORPHAN]		= "orphan",
	[FAULT_BLOCK]		= "no more block",
	[FAULT_DIR_DEPTH]	= "too big dir depth",
};
#endif