diff options
-rw-r--r-- | mm/filemap.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index e1cca770688f..72e46e6f0d9a 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
@@ -522,12 +522,17 @@ int filemap_fdatawait(struct address_space *mapping) | |||
522 | } | 522 | } |
523 | EXPORT_SYMBOL(filemap_fdatawait); | 523 | EXPORT_SYMBOL(filemap_fdatawait); |
524 | 524 | ||
525 | static bool mapping_needs_writeback(struct address_space *mapping) | ||
526 | { | ||
527 | return (!dax_mapping(mapping) && mapping->nrpages) || | ||
528 | (dax_mapping(mapping) && mapping->nrexceptional); | ||
529 | } | ||
530 | |||
525 | int filemap_write_and_wait(struct address_space *mapping) | 531 | int filemap_write_and_wait(struct address_space *mapping) |
526 | { | 532 | { |
527 | int err = 0; | 533 | int err = 0; |
528 | 534 | ||
529 | if ((!dax_mapping(mapping) && mapping->nrpages) || | 535 | if (mapping_needs_writeback(mapping)) { |
530 | (dax_mapping(mapping) && mapping->nrexceptional)) { | ||
531 | err = filemap_fdatawrite(mapping); | 536 | err = filemap_fdatawrite(mapping); |
532 | /* | 537 | /* |
533 | * Even if the above returned error, the pages may be | 538 | * Even if the above returned error, the pages may be |
@@ -566,8 +571,7 @@ int filemap_write_and_wait_range(struct address_space *mapping, | |||
566 | { | 571 | { |
567 | int err = 0; | 572 | int err = 0; |
568 | 573 | ||
569 | if ((!dax_mapping(mapping) && mapping->nrpages) || | 574 | if (mapping_needs_writeback(mapping)) { |
570 | (dax_mapping(mapping) && mapping->nrexceptional)) { | ||
571 | err = __filemap_fdatawrite_range(mapping, lstart, lend, | 575 | err = __filemap_fdatawrite_range(mapping, lstart, lend, |
572 | WB_SYNC_ALL); | 576 | WB_SYNC_ALL); |
573 | /* See comment of filemap_write_and_wait() */ | 577 | /* See comment of filemap_write_and_wait() */ |
@@ -656,8 +660,7 @@ int file_write_and_wait_range(struct file *file, loff_t lstart, loff_t lend) | |||
656 | int err = 0, err2; | 660 | int err = 0, err2; |
657 | struct address_space *mapping = file->f_mapping; | 661 | struct address_space *mapping = file->f_mapping; |
658 | 662 | ||
659 | if ((!dax_mapping(mapping) && mapping->nrpages) || | 663 | if (mapping_needs_writeback(mapping)) { |
660 | (dax_mapping(mapping) && mapping->nrexceptional)) { | ||
661 | err = __filemap_fdatawrite_range(mapping, lstart, lend, | 664 | err = __filemap_fdatawrite_range(mapping, lstart, lend, |
662 | WB_SYNC_ALL); | 665 | WB_SYNC_ALL); |
663 | /* See comment of filemap_write_and_wait() */ | 666 | /* See comment of filemap_write_and_wait() */ |