inode.c (f12fbb9599e2ecca734d194e502fc1ac6822c85e) | inode.c (df7363307ead980c9cd659b2f7adf9b6c265b7f3) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ext4/inode.c 4 * 5 * Copyright (C) 1992, 1993, 1994, 1995 6 * Remy Card (card@masi.ibp.fr) 7 * Laboratoire MASI - Institut Blaise Pascal 8 * Universite Pierre et Marie Curie (Paris VI) --- 1723 unchanged lines hidden (view full) --- 1732 ext_debug(inode, "max_blocks %u, logical block %lu\n", map->m_len, 1733 (unsigned long) map->m_lblk); 1734 1735 /* Lookup extent status tree firstly */ 1736 if (ext4_es_lookup_extent(inode, iblock, NULL, &es)) { 1737 if (ext4_es_is_hole(&es)) 1738 goto add_delayed; 1739 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ext4/inode.c 4 * 5 * Copyright (C) 1992, 1993, 1994, 1995 6 * Remy Card (card@masi.ibp.fr) 7 * Laboratoire MASI - Institut Blaise Pascal 8 * Universite Pierre et Marie Curie (Paris VI) --- 1723 unchanged lines hidden (view full) --- 1732 ext_debug(inode, "max_blocks %u, logical block %lu\n", map->m_len, 1733 (unsigned long) map->m_lblk); 1734 1735 /* Lookup extent status tree firstly */ 1736 if (ext4_es_lookup_extent(inode, iblock, NULL, &es)) { 1737 if (ext4_es_is_hole(&es)) 1738 goto add_delayed; 1739 |
1740found: |
|
1740 /* 1741 * Delayed extent could be allocated by fallocate. 1742 * So we need to check it. 1743 */ 1744 if (ext4_es_is_delayed(&es) && !ext4_es_is_unwritten(&es)) { 1745 map_bh(bh, inode->i_sb, invalid_block); 1746 set_buffer_new(bh); 1747 set_buffer_delay(bh); --- 28 unchanged lines hidden (view full) --- 1776 else 1777 retval = ext4_map_query_blocks(NULL, inode, map); 1778 up_read(&EXT4_I(inode)->i_data_sem); 1779 if (retval) 1780 return retval; 1781 1782add_delayed: 1783 down_write(&EXT4_I(inode)->i_data_sem); | 1741 /* 1742 * Delayed extent could be allocated by fallocate. 1743 * So we need to check it. 1744 */ 1745 if (ext4_es_is_delayed(&es) && !ext4_es_is_unwritten(&es)) { 1746 map_bh(bh, inode->i_sb, invalid_block); 1747 set_buffer_new(bh); 1748 set_buffer_delay(bh); --- 28 unchanged lines hidden (view full) --- 1777 else 1778 retval = ext4_map_query_blocks(NULL, inode, map); 1779 up_read(&EXT4_I(inode)->i_data_sem); 1780 if (retval) 1781 return retval; 1782 1783add_delayed: 1784 down_write(&EXT4_I(inode)->i_data_sem); |
1785 /* 1786 * Page fault path (ext4_page_mkwrite does not take i_rwsem) 1787 * and fallocate path (no folio lock) can race. Make sure we 1788 * lookup the extent status tree here again while i_data_sem 1789 * is held in write mode, before inserting a new da entry in 1790 * the extent status tree. 1791 */ 1792 if (ext4_es_lookup_extent(inode, iblock, NULL, &es)) { 1793 if (!ext4_es_is_hole(&es)) { 1794 up_write(&EXT4_I(inode)->i_data_sem); 1795 goto found; 1796 } 1797 } else if (!ext4_has_inline_data(inode)) { 1798 retval = ext4_map_query_blocks(NULL, inode, map); 1799 if (retval) { 1800 up_write(&EXT4_I(inode)->i_data_sem); 1801 return retval; 1802 } 1803 } 1804 |
|
1784 retval = ext4_insert_delayed_block(inode, map->m_lblk); 1785 up_write(&EXT4_I(inode)->i_data_sem); 1786 if (retval) 1787 return retval; 1788 1789 map_bh(bh, inode->i_sb, invalid_block); 1790 set_buffer_new(bh); 1791 set_buffer_delay(bh); --- 4403 unchanged lines hidden --- | 1805 retval = ext4_insert_delayed_block(inode, map->m_lblk); 1806 up_write(&EXT4_I(inode)->i_data_sem); 1807 if (retval) 1808 return retval; 1809 1810 map_bh(bh, inode->i_sb, invalid_block); 1811 set_buffer_new(bh); 1812 set_buffer_delay(bh); --- 4403 unchanged lines hidden --- |