aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/segment.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/segment.c')
-rw-r--r--fs/f2fs/segment.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 1e264e761f71..9993f94848fc 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -335,13 +335,26 @@ static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno)
335 mutex_unlock(&dirty_i->seglist_lock); 335 mutex_unlock(&dirty_i->seglist_lock);
336} 336}
337 337
338static void f2fs_issue_discard(struct f2fs_sb_info *sbi, 338static int f2fs_issue_discard(struct f2fs_sb_info *sbi,
339 block_t blkstart, block_t blklen) 339 block_t blkstart, block_t blklen)
340{ 340{
341 sector_t start = SECTOR_FROM_BLOCK(sbi, blkstart); 341 sector_t start = SECTOR_FROM_BLOCK(sbi, blkstart);
342 sector_t len = SECTOR_FROM_BLOCK(sbi, blklen); 342 sector_t len = SECTOR_FROM_BLOCK(sbi, blklen);
343 blkdev_issue_discard(sbi->sb->s_bdev, start, len, GFP_NOFS, 0);
344 trace_f2fs_issue_discard(sbi->sb, blkstart, blklen); 343 trace_f2fs_issue_discard(sbi->sb, blkstart, blklen);
344 return blkdev_issue_discard(sbi->sb->s_bdev, start, len, GFP_NOFS, 0);
345}
346
347void discard_next_dnode(struct f2fs_sb_info *sbi)
348{
349 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_WARM_NODE);
350 block_t blkaddr = NEXT_FREE_BLKADDR(sbi, curseg);
351
352 if (f2fs_issue_discard(sbi, blkaddr, 1)) {
353 struct page *page = grab_meta_page(sbi, blkaddr);
354 /* zero-filled page */
355 set_page_dirty(page);
356 f2fs_put_page(page, 1);
357 }
345} 358}
346 359
347static void add_discard_addrs(struct f2fs_sb_info *sbi, 360static void add_discard_addrs(struct f2fs_sb_info *sbi,