aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/f2fs/segment.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index df60e1502b82..3e95db5375ed 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -793,24 +793,13 @@ static int __f2fs_issue_discard_async(struct f2fs_sb_info *sbi,
793static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi, 793static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi,
794 struct block_device *bdev, block_t blkstart, block_t blklen) 794 struct block_device *bdev, block_t blkstart, block_t blklen)
795{ 795{
796 sector_t nr_sects = SECTOR_FROM_BLOCK(blklen); 796 sector_t sector, nr_sects;
797 sector_t sector;
798 int devi = 0; 797 int devi = 0;
799 798
800 if (sbi->s_ndevs) { 799 if (sbi->s_ndevs) {
801 devi = f2fs_target_device_index(sbi, blkstart); 800 devi = f2fs_target_device_index(sbi, blkstart);
802 blkstart -= FDEV(devi).start_blk; 801 blkstart -= FDEV(devi).start_blk;
803 } 802 }
804 sector = SECTOR_FROM_BLOCK(blkstart);
805
806 if (sector & (bdev_zone_sectors(bdev) - 1) ||
807 nr_sects != bdev_zone_sectors(bdev)) {
808 f2fs_msg(sbi->sb, KERN_INFO,
809 "(%d) %s: Unaligned discard attempted (block %x + %x)",
810 devi, sbi->s_ndevs ? FDEV(devi).path: "",
811 blkstart, blklen);
812 return -EIO;
813 }
814 803
815 /* 804 /*
816 * We need to know the type of the zone: for conventional zones, 805 * We need to know the type of the zone: for conventional zones,
@@ -825,6 +814,17 @@ static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi,
825 return __f2fs_issue_discard_async(sbi, bdev, blkstart, blklen); 814 return __f2fs_issue_discard_async(sbi, bdev, blkstart, blklen);
826 case BLK_ZONE_TYPE_SEQWRITE_REQ: 815 case BLK_ZONE_TYPE_SEQWRITE_REQ:
827 case BLK_ZONE_TYPE_SEQWRITE_PREF: 816 case BLK_ZONE_TYPE_SEQWRITE_PREF:
817 sector = SECTOR_FROM_BLOCK(blkstart);
818 nr_sects = SECTOR_FROM_BLOCK(blklen);
819
820 if (sector & (bdev_zone_sectors(bdev) - 1) ||
821 nr_sects != bdev_zone_sectors(bdev)) {
822 f2fs_msg(sbi->sb, KERN_INFO,
823 "(%d) %s: Unaligned discard attempted (block %x + %x)",
824 devi, sbi->s_ndevs ? FDEV(devi).path: "",
825 blkstart, blklen);
826 return -EIO;
827 }
828 trace_f2fs_issue_reset_zone(bdev, blkstart); 828 trace_f2fs_issue_reset_zone(bdev, blkstart);
829 return blkdev_reset_zones(bdev, sector, 829 return blkdev_reset_zones(bdev, sector,
830 nr_sects, GFP_NOFS); 830 nr_sects, GFP_NOFS);