aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/direct-io.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 9d1d2aa73e42..910a8ed74b5d 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -524,8 +524,6 @@ static int get_more_blocks(struct dio *dio)
524 */ 524 */
525 ret = dio->page_errors; 525 ret = dio->page_errors;
526 if (ret == 0) { 526 if (ret == 0) {
527 map_bh->b_state = 0;
528 map_bh->b_size = 0;
529 BUG_ON(dio->block_in_file >= dio->final_block_in_request); 527 BUG_ON(dio->block_in_file >= dio->final_block_in_request);
530 fs_startblk = dio->block_in_file >> dio->blkfactor; 528 fs_startblk = dio->block_in_file >> dio->blkfactor;
531 dio_count = dio->final_block_in_request - dio->block_in_file; 529 dio_count = dio->final_block_in_request - dio->block_in_file;
@@ -534,6 +532,9 @@ static int get_more_blocks(struct dio *dio)
534 if (dio_count & blkmask) 532 if (dio_count & blkmask)
535 fs_count++; 533 fs_count++;
536 534
535 map_bh->b_state = 0;
536 map_bh->b_size = fs_count << dio->inode->i_blkbits;
537
537 create = dio->rw == WRITE; 538 create = dio->rw == WRITE;
538 if (dio->lock_type == DIO_LOCKING) { 539 if (dio->lock_type == DIO_LOCKING) {
539 if (dio->block_in_file < (i_size_read(dio->inode) >> 540 if (dio->block_in_file < (i_size_read(dio->inode) >>
@@ -542,13 +543,13 @@ static int get_more_blocks(struct dio *dio)
542 } else if (dio->lock_type == DIO_NO_LOCKING) { 543 } else if (dio->lock_type == DIO_NO_LOCKING) {
543 create = 0; 544 create = 0;
544 } 545 }
546
545 /* 547 /*
546 * For writes inside i_size we forbid block creations: only 548 * For writes inside i_size we forbid block creations: only
547 * overwrites are permitted. We fall back to buffered writes 549 * overwrites are permitted. We fall back to buffered writes
548 * at a higher level for inside-i_size block-instantiating 550 * at a higher level for inside-i_size block-instantiating
549 * writes. 551 * writes.
550 */ 552 */
551 map_bh->b_size = fs_count << dio->blkbits;
552 ret = (*dio->get_block)(dio->inode, fs_startblk, 553 ret = (*dio->get_block)(dio->inode, fs_startblk,
553 map_bh, create); 554 map_bh, create);
554 } 555 }