SM_I
blkaddr < SM_I(sbi)->ssa_blkaddr))
if (IS_F2FS_IPU_UTIL(sbi) && utilization(sbi) > SM_I(sbi)->min_ipu_util)
utilization(sbi) > SM_I(sbi)->min_ipu_util)
SM_I(F2FS_M_SB(mapping))->min_hot_blocks)
if (get_dirty_pages(inode) >= SM_I(F2FS_I_SB(inode))->min_seq_blocks)
((pblock - SM_I(sbi)->main_blkaddr) % blks_per_sec ||
if (SM_I(sbi)->fcc_info) {
atomic_read(&SM_I(sbi)->fcc_info->issued_flush);
atomic_read(&SM_I(sbi)->fcc_info->queued_flush);
llist_empty(&SM_I(sbi)->fcc_info->issue_list);
if (SM_I(sbi)->dcc_info) {
atomic_read(&SM_I(sbi)->dcc_info->issued_discard);
atomic_read(&SM_I(sbi)->dcc_info->queued_discard);
atomic_read(&SM_I(sbi)->dcc_info->discard_cmd_cnt);
si->undiscard_blks = SM_I(sbi)->dcc_info->undiscard_blks;
if (SM_I(sbi)->fcc_info)
if (SM_I(sbi)->dcc_info) {
atomic_read(&SM_I(sbi)->dcc_info->discard_cmd_cnt);
unsigned long policy = SM_I(sbi)->ipu_policy;
return (struct sit_info *)(SM_I(sbi)->sit_info);
return (struct free_segmap_info *)(SM_I(sbi)->free_info);
return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info);
if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info &&
atomic_read(&SM_I(sbi)->dcc_info->queued_discard))
if (SM_I(sbi) && SM_I(sbi)->fcc_info &&
atomic_read(&SM_I(sbi)->fcc_info->queued_flush))
else if (blkaddr < SM_I(sbi)->ssa_blkaddr) \
else if (blkaddr < SM_I(sbi)->main_blkaddr) \
if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
SM_I(sbi)->segment_count = (int)SM_I(sbi)->segment_count + segs;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
mutex_lock(&SM_I(sbi)->dcc_info->cmd_lock);
mutex_unlock(&SM_I(sbi)->dcc_info->cmd_lock);
mutex_lock(&SM_I(sbi)->dcc_info->cmd_lock);
mutex_unlock(&SM_I(sbi)->dcc_info->cmd_lock);
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
SM_I(sbi)->min_ssr_sections + reserved_sections(sbi));
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct list_head *head = &SM_I(sbi)->dcc_info->entry_list;
SM_I(sbi)->dcc_info->nr_discards >=
SM_I(sbi)->dcc_info->max_discards)
while (force || SM_I(sbi)->dcc_info->nr_discards <=
SM_I(sbi)->dcc_info->max_discards) {
SM_I(sbi)->dcc_info->nr_discards += end - start;
struct list_head *head = &(SM_I(sbi)->dcc_info->entry_list);
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
if (SM_I(sbi)->dcc_info) {
dcc = SM_I(sbi)->dcc_info;
SM_I(sbi)->dcc_info = dcc;
SM_I(sbi)->dcc_info = NULL;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
SM_I(sbi)->dcc_info = NULL;
f2fs_down_read(&SM_I(sbi)->curseg_lock);
f2fs_up_read(&SM_I(sbi)->curseg_lock);
f2fs_down_read(&SM_I(sbi)->curseg_lock);
f2fs_up_read(&SM_I(sbi)->curseg_lock);
f2fs_down_read(&SM_I(sbi)->curseg_lock);
f2fs_up_read(&SM_I(sbi)->curseg_lock);
f2fs_down_read(&SM_I(sbi)->curseg_lock);
f2fs_up_read(&SM_I(sbi)->curseg_lock);
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
f2fs_down_read(&SM_I(sbi)->curseg_lock);
f2fs_up_read(&SM_I(sbi)->curseg_lock);
f2fs_up_read(&SM_I(sbi)->curseg_lock);
f2fs_down_write(&SM_I(sbi)->curseg_lock);
f2fs_up_write(&SM_I(sbi)->curseg_lock);
struct f2fs_sm_info *sm_info = SM_I(sbi);
add_sit_entry(segno, &SM_I(sbi)->sit_entry_set);
struct list_head *head = &SM_I(sbi)->sit_entry_set;
SM_I(sbi)->sit_info = sit_i;
SM_I(sbi)->free_info = free_i;
SM_I(sbi)->curseg_array = array;
SM_I(sbi)->dirty_info = dirty_i;
SM_I(sbi)->dirty_info = NULL;
struct flush_cmd_control *fcc = SM_I(sbi)->fcc_info;
struct curseg_info *array = SM_I(sbi)->curseg_array;
SM_I(sbi)->curseg_array = NULL;
struct free_segmap_info *free_i = SM_I(sbi)->free_info;
SM_I(sbi)->free_info = NULL;
SM_I(sbi)->sit_info = NULL;
struct f2fs_sm_info *sm_info = SM_I(sbi);
struct flush_cmd_control *fcc = SM_I(sbi)->fcc_info;
if (SM_I(sbi)->fcc_info) {
fcc = SM_I(sbi)->fcc_info;
SM_I(sbi)->fcc_info = fcc;
struct flush_cmd_control *fcc = SM_I(sbi)->fcc_info;
SM_I(sbi)->fcc_info = NULL;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
return (struct curseg_info *)(SM_I(sbi)->curseg_array + type);
(SM_I(sbi) ? SM_I(sbi)->main_blkaddr : \
(SM_I(sbi) ? SM_I(sbi)->seg0_blkaddr : \
#define MAIN_SEGS(sbi) (SM_I(sbi)->main_segments)
(SM_I(sbi) ? SM_I(sbi)->segment_count : \
return SM_I(sbi)->reserved_segments;
return SM_I(sbi)->ovp_segments;
return prefree_segments(sbi) > SM_I(sbi)->rec_prefree_segments;
return SM_I(sbi)->ipu_policy == F2FS_IPU_DISABLE;
return SM_I(sbi)->ipu_policy & BIT(name); \
(SM_I(sbi)->ssa_blkaddr + (segno / (sbi)->sums_per_block))
SM_I(sbi)->dcc_info->discard_granularity =
SM_I(sbi)->ipu_policy = BIT(F2FS_IPU_FORCE) |
if (!SM_I(sbi)->dcc_info)
&SM_I(sbi)->dcc_info->discard_cmd_cnt));
if (!SM_I(sbi)->dcc_info)
&SM_I(sbi)->dcc_info->issued_discard));
if (!SM_I(sbi)->dcc_info)
&SM_I(sbi)->dcc_info->queued_discard));
if (!SM_I(sbi)->dcc_info)
SM_I(sbi)->dcc_info->undiscard_blks);
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
SM_I(sbi)->ssa_blkaddr,
SM_I(sbi)->main_blkaddr,
return (unsigned char *)SM_I(sbi);
return (unsigned char *)SM_I(sbi)->dcc_info;
SM_I(sbi)->ipu_policy = (unsigned int)t;