diff options
-rw-r--r-- | fs/f2fs/segment.c | 24 |
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, | |||
793 | static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi, | 793 | static 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); |