@@ -850,6 +850,7 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
850
850
struct block_device * bdev = I_BDEV (inode );
851
851
loff_t end = start + len - 1 ;
852
852
loff_t isize ;
853
+ unsigned int flags ;
853
854
int error ;
854
855
855
856
/* Fail if we don't recognize the flags. */
@@ -877,34 +878,29 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
877
878
inode_lock (inode );
878
879
filemap_invalidate_lock (inode -> i_mapping );
879
880
880
- /*
881
- * Invalidate the page cache, including dirty pages, for valid
882
- * de-allocate mode calls to fallocate().
883
- */
884
881
switch (mode ) {
885
882
case FALLOC_FL_ZERO_RANGE :
886
883
case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE :
887
- error = truncate_bdev_range (bdev , file_to_blk_mode (file ), start , end );
888
- if (error )
889
- goto fail ;
890
-
891
- error = blkdev_issue_zeroout (bdev , start >> SECTOR_SHIFT ,
892
- len >> SECTOR_SHIFT , GFP_KERNEL ,
893
- BLKDEV_ZERO_NOUNMAP );
884
+ flags = BLKDEV_ZERO_NOUNMAP ;
894
885
break ;
895
886
case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE :
896
- error = truncate_bdev_range (bdev , file_to_blk_mode (file ), start , end );
897
- if (error )
898
- goto fail ;
899
-
900
- error = blkdev_issue_zeroout (bdev , start >> SECTOR_SHIFT ,
901
- len >> SECTOR_SHIFT , GFP_KERNEL ,
902
- BLKDEV_ZERO_NOFALLBACK );
887
+ flags = BLKDEV_ZERO_NOFALLBACK ;
903
888
break ;
904
889
default :
905
890
error = - EOPNOTSUPP ;
891
+ goto fail ;
906
892
}
907
893
894
+ /*
895
+ * Invalidate the page cache, including dirty pages, for valid
896
+ * de-allocate mode calls to fallocate().
897
+ */
898
+ error = truncate_bdev_range (bdev , file_to_blk_mode (file ), start , end );
899
+ if (error )
900
+ goto fail ;
901
+
902
+ error = blkdev_issue_zeroout (bdev , start >> SECTOR_SHIFT ,
903
+ len >> SECTOR_SHIFT , GFP_KERNEL , flags );
908
904
fail :
909
905
filemap_invalidate_unlock (inode -> i_mapping );
910
906
inode_unlock (inode );
0 commit comments