diff options
| -rw-r--r-- | fs/ext4/extents_status.c | 8 | ||||
| -rw-r--r-- | fs/ext4/inode.c | 2 |
2 files changed, 10 insertions, 0 deletions
diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c index d33d5a6852b9..26724aeece73 100644 --- a/fs/ext4/extents_status.c +++ b/fs/ext4/extents_status.c | |||
| @@ -703,6 +703,14 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk, | |||
| 703 | 703 | ||
| 704 | BUG_ON(end < lblk); | 704 | BUG_ON(end < lblk); |
| 705 | 705 | ||
| 706 | if ((status & EXTENT_STATUS_DELAYED) && | ||
| 707 | (status & EXTENT_STATUS_WRITTEN)) { | ||
| 708 | ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as " | ||
| 709 | " delayed and written which can potentially " | ||
| 710 | " cause data loss.\n", lblk, len); | ||
| 711 | WARN_ON(1); | ||
| 712 | } | ||
| 713 | |||
| 706 | newes.es_lblk = lblk; | 714 | newes.es_lblk = lblk; |
| 707 | newes.es_len = len; | 715 | newes.es_len = len; |
| 708 | ext4_es_store_pblock_status(&newes, pblk, status); | 716 | ext4_es_store_pblock_status(&newes, pblk, status); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index f6b35d8a4a5b..4415cea85ced 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
| @@ -532,6 +532,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode, | |||
| 532 | status = map->m_flags & EXT4_MAP_UNWRITTEN ? | 532 | status = map->m_flags & EXT4_MAP_UNWRITTEN ? |
| 533 | EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; | 533 | EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; |
| 534 | if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) && | 534 | if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) && |
| 535 | !(status & EXTENT_STATUS_WRITTEN) && | ||
| 535 | ext4_find_delalloc_range(inode, map->m_lblk, | 536 | ext4_find_delalloc_range(inode, map->m_lblk, |
| 536 | map->m_lblk + map->m_len - 1)) | 537 | map->m_lblk + map->m_len - 1)) |
| 537 | status |= EXTENT_STATUS_DELAYED; | 538 | status |= EXTENT_STATUS_DELAYED; |
| @@ -636,6 +637,7 @@ found: | |||
| 636 | status = map->m_flags & EXT4_MAP_UNWRITTEN ? | 637 | status = map->m_flags & EXT4_MAP_UNWRITTEN ? |
| 637 | EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; | 638 | EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; |
| 638 | if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) && | 639 | if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) && |
| 640 | !(status & EXTENT_STATUS_WRITTEN) && | ||
| 639 | ext4_find_delalloc_range(inode, map->m_lblk, | 641 | ext4_find_delalloc_range(inode, map->m_lblk, |
| 640 | map->m_lblk + map->m_len - 1)) | 642 | map->m_lblk + map->m_len - 1)) |
| 641 | status |= EXTENT_STATUS_DELAYED; | 643 | status |= EXTENT_STATUS_DELAYED; |
