Count pages after possible truncating the iterator to the maximum zone append size, not before. Signed-off-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx> --- fs/zonefs/super.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c index 5b7ced5c643b..116bad28cd68 100644 --- a/fs/zonefs/super.c +++ b/fs/zonefs/super.c @@ -607,13 +607,14 @@ static ssize_t zonefs_file_dio_append(struct kiocb *iocb, struct iov_iter *from) int nr_pages; ssize_t ret; + max = queue_max_zone_append_sectors(bdev_get_queue(bdev)); + max = ALIGN_DOWN(max << SECTOR_SHIFT, inode->i_sb->s_blocksize); + iov_iter_truncate(from, max); + nr_pages = iov_iter_npages(from, BIO_MAX_PAGES); if (!nr_pages) return 0; - max = queue_max_zone_append_sectors(bdev_get_queue(bdev)); - max = ALIGN_DOWN(max << SECTOR_SHIFT, inode->i_sb->s_blocksize); - iov_iter_truncate(from, max); bio = bio_alloc_bioset(GFP_NOFS, nr_pages, &fs_bio_set); if (!bio) -- 2.26.2