diff options
Diffstat (limited to 'fs/direct-io.c')
-rw-r--r-- | fs/direct-io.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c index dbc1a1f080ce..ec2fb6fe6d37 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c | |||
@@ -679,6 +679,7 @@ static int get_more_blocks(struct dio *dio, struct dio_submit *sdio, | |||
679 | unsigned long fs_count; /* Number of filesystem-sized blocks */ | 679 | unsigned long fs_count; /* Number of filesystem-sized blocks */ |
680 | int create; | 680 | int create; |
681 | unsigned int i_blkbits = sdio->blkbits + sdio->blkfactor; | 681 | unsigned int i_blkbits = sdio->blkbits + sdio->blkfactor; |
682 | loff_t i_size; | ||
682 | 683 | ||
683 | /* | 684 | /* |
684 | * If there was a memory error and we've overwritten all the | 685 | * If there was a memory error and we've overwritten all the |
@@ -708,8 +709,8 @@ static int get_more_blocks(struct dio *dio, struct dio_submit *sdio, | |||
708 | */ | 709 | */ |
709 | create = dio->op == REQ_OP_WRITE; | 710 | create = dio->op == REQ_OP_WRITE; |
710 | if (dio->flags & DIO_SKIP_HOLES) { | 711 | if (dio->flags & DIO_SKIP_HOLES) { |
711 | if (fs_startblk <= ((i_size_read(dio->inode) - 1) >> | 712 | i_size = i_size_read(dio->inode); |
712 | i_blkbits)) | 713 | if (i_size && fs_startblk <= (i_size - 1) >> i_blkbits) |
713 | create = 0; | 714 | create = 0; |
714 | } | 715 | } |
715 | 716 | ||