Commit 8b8343fa authored by Jaegeuk Kim's avatar Jaegeuk Kim

f2fs: implement a lock-free stat_show

The stat_show is just to show the current status of f2fs.
So, we can remove all the there-in locks.
Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
parent 8a7ed66a
...@@ -86,7 +86,6 @@ static void update_sit_info(struct f2fs_sb_info *sbi) ...@@ -86,7 +86,6 @@ static void update_sit_info(struct f2fs_sb_info *sbi)
{ {
struct f2fs_stat_info *si = F2FS_STAT(sbi); struct f2fs_stat_info *si = F2FS_STAT(sbi);
unsigned int blks_per_sec, hblks_per_sec, total_vblocks, bimodal, dist; unsigned int blks_per_sec, hblks_per_sec, total_vblocks, bimodal, dist;
struct sit_info *sit_i = SIT_I(sbi);
unsigned int segno, vblocks; unsigned int segno, vblocks;
int ndirty = 0; int ndirty = 0;
...@@ -94,7 +93,6 @@ static void update_sit_info(struct f2fs_sb_info *sbi) ...@@ -94,7 +93,6 @@ static void update_sit_info(struct f2fs_sb_info *sbi)
total_vblocks = 0; total_vblocks = 0;
blks_per_sec = sbi->segs_per_sec * (1 << sbi->log_blocks_per_seg); blks_per_sec = sbi->segs_per_sec * (1 << sbi->log_blocks_per_seg);
hblks_per_sec = blks_per_sec / 2; hblks_per_sec = blks_per_sec / 2;
mutex_lock(&sit_i->sentry_lock);
for (segno = 0; segno < TOTAL_SEGS(sbi); segno += sbi->segs_per_sec) { for (segno = 0; segno < TOTAL_SEGS(sbi); segno += sbi->segs_per_sec) {
vblocks = get_valid_blocks(sbi, segno, sbi->segs_per_sec); vblocks = get_valid_blocks(sbi, segno, sbi->segs_per_sec);
dist = abs(vblocks - hblks_per_sec); dist = abs(vblocks - hblks_per_sec);
...@@ -105,7 +103,6 @@ static void update_sit_info(struct f2fs_sb_info *sbi) ...@@ -105,7 +103,6 @@ static void update_sit_info(struct f2fs_sb_info *sbi)
ndirty++; ndirty++;
} }
} }
mutex_unlock(&sit_i->sentry_lock);
dist = TOTAL_SECS(sbi) * hblks_per_sec * hblks_per_sec / 100; dist = TOTAL_SECS(sbi) * hblks_per_sec * hblks_per_sec / 100;
si->bimodal = bimodal / dist; si->bimodal = bimodal / dist;
if (si->dirty_count) if (si->dirty_count)
......
...@@ -704,11 +704,7 @@ static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type) ...@@ -704,11 +704,7 @@ static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type)
static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi) static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi)
{ {
block_t ret; return sbi->total_valid_block_count;
spin_lock(&sbi->stat_lock);
ret = sbi->total_valid_block_count;
spin_unlock(&sbi->stat_lock);
return ret;
} }
static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag) static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag)
...@@ -804,11 +800,7 @@ static inline void dec_valid_node_count(struct f2fs_sb_info *sbi, ...@@ -804,11 +800,7 @@ static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi) static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi)
{ {
unsigned int ret; return sbi->total_valid_node_count;
spin_lock(&sbi->stat_lock);
ret = sbi->total_valid_node_count;
spin_unlock(&sbi->stat_lock);
return ret;
} }
static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi) static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi)
...@@ -829,11 +821,7 @@ static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi) ...@@ -829,11 +821,7 @@ static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi)
static inline unsigned int valid_inode_count(struct f2fs_sb_info *sbi) static inline unsigned int valid_inode_count(struct f2fs_sb_info *sbi)
{ {
unsigned int ret; return sbi->total_valid_inode_count;
spin_lock(&sbi->stat_lock);
ret = sbi->total_valid_inode_count;
spin_unlock(&sbi->stat_lock);
return ret;
} }
static inline void f2fs_put_page(struct page *page, int unlock) static inline void f2fs_put_page(struct page *page, int unlock)
......
...@@ -380,26 +380,12 @@ static inline void get_sit_bitmap(struct f2fs_sb_info *sbi, ...@@ -380,26 +380,12 @@ static inline void get_sit_bitmap(struct f2fs_sb_info *sbi,
static inline block_t written_block_count(struct f2fs_sb_info *sbi) static inline block_t written_block_count(struct f2fs_sb_info *sbi)
{ {
struct sit_info *sit_i = SIT_I(sbi); return SIT_I(sbi)->written_valid_blocks;
block_t vblocks;
mutex_lock(&sit_i->sentry_lock);
vblocks = sit_i->written_valid_blocks;
mutex_unlock(&sit_i->sentry_lock);
return vblocks;
} }
static inline unsigned int free_segments(struct f2fs_sb_info *sbi) static inline unsigned int free_segments(struct f2fs_sb_info *sbi)
{ {
struct free_segmap_info *free_i = FREE_I(sbi); return FREE_I(sbi)->free_segments;
unsigned int free_segs;
read_lock(&free_i->segmap_lock);
free_segs = free_i->free_segments;
read_unlock(&free_i->segmap_lock);
return free_segs;
} }
static inline int reserved_segments(struct f2fs_sb_info *sbi) static inline int reserved_segments(struct f2fs_sb_info *sbi)
...@@ -409,14 +395,7 @@ static inline int reserved_segments(struct f2fs_sb_info *sbi) ...@@ -409,14 +395,7 @@ static inline int reserved_segments(struct f2fs_sb_info *sbi)
static inline unsigned int free_sections(struct f2fs_sb_info *sbi) static inline unsigned int free_sections(struct f2fs_sb_info *sbi)
{ {
struct free_segmap_info *free_i = FREE_I(sbi); return FREE_I(sbi)->free_sections;
unsigned int free_secs;
read_lock(&free_i->segmap_lock);
free_secs = free_i->free_sections;
read_unlock(&free_i->segmap_lock);
return free_secs;
} }
static inline unsigned int prefree_segments(struct f2fs_sb_info *sbi) static inline unsigned int prefree_segments(struct f2fs_sb_info *sbi)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment