diff options
Diffstat (limited to 'fs/btrfs/delayed-inode.c')
| -rw-r--r-- | fs/btrfs/delayed-inode.c | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 054577bddaf2..82f0c7c95474 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c | |||
| @@ -1755,27 +1755,31 @@ static void fill_stack_inode_item(struct btrfs_trans_handle *trans, | |||
| 1755 | btrfs_set_stack_inode_flags(inode_item, BTRFS_I(inode)->flags); | 1755 | btrfs_set_stack_inode_flags(inode_item, BTRFS_I(inode)->flags); |
| 1756 | btrfs_set_stack_inode_block_group(inode_item, 0); | 1756 | btrfs_set_stack_inode_block_group(inode_item, 0); |
| 1757 | 1757 | ||
| 1758 | btrfs_set_stack_timespec_sec(btrfs_inode_atime(inode_item), | 1758 | btrfs_set_stack_timespec_sec(&inode_item->atime, |
| 1759 | inode->i_atime.tv_sec); | 1759 | inode->i_atime.tv_sec); |
| 1760 | btrfs_set_stack_timespec_nsec(btrfs_inode_atime(inode_item), | 1760 | btrfs_set_stack_timespec_nsec(&inode_item->atime, |
| 1761 | inode->i_atime.tv_nsec); | 1761 | inode->i_atime.tv_nsec); |
| 1762 | 1762 | ||
| 1763 | btrfs_set_stack_timespec_sec(btrfs_inode_mtime(inode_item), | 1763 | btrfs_set_stack_timespec_sec(&inode_item->mtime, |
| 1764 | inode->i_mtime.tv_sec); | 1764 | inode->i_mtime.tv_sec); |
| 1765 | btrfs_set_stack_timespec_nsec(btrfs_inode_mtime(inode_item), | 1765 | btrfs_set_stack_timespec_nsec(&inode_item->mtime, |
| 1766 | inode->i_mtime.tv_nsec); | 1766 | inode->i_mtime.tv_nsec); |
| 1767 | 1767 | ||
| 1768 | btrfs_set_stack_timespec_sec(btrfs_inode_ctime(inode_item), | 1768 | btrfs_set_stack_timespec_sec(&inode_item->ctime, |
| 1769 | inode->i_ctime.tv_sec); | 1769 | inode->i_ctime.tv_sec); |
| 1770 | btrfs_set_stack_timespec_nsec(btrfs_inode_ctime(inode_item), | 1770 | btrfs_set_stack_timespec_nsec(&inode_item->ctime, |
| 1771 | inode->i_ctime.tv_nsec); | 1771 | inode->i_ctime.tv_nsec); |
| 1772 | |||
| 1773 | btrfs_set_stack_timespec_sec(&inode_item->otime, | ||
| 1774 | BTRFS_I(inode)->i_otime.tv_sec); | ||
| 1775 | btrfs_set_stack_timespec_nsec(&inode_item->otime, | ||
| 1776 | BTRFS_I(inode)->i_otime.tv_nsec); | ||
| 1772 | } | 1777 | } |
| 1773 | 1778 | ||
| 1774 | int btrfs_fill_inode(struct inode *inode, u32 *rdev) | 1779 | int btrfs_fill_inode(struct inode *inode, u32 *rdev) |
| 1775 | { | 1780 | { |
| 1776 | struct btrfs_delayed_node *delayed_node; | 1781 | struct btrfs_delayed_node *delayed_node; |
| 1777 | struct btrfs_inode_item *inode_item; | 1782 | struct btrfs_inode_item *inode_item; |
| 1778 | struct btrfs_timespec *tspec; | ||
| 1779 | 1783 | ||
| 1780 | delayed_node = btrfs_get_delayed_node(inode); | 1784 | delayed_node = btrfs_get_delayed_node(inode); |
| 1781 | if (!delayed_node) | 1785 | if (!delayed_node) |
| @@ -1802,17 +1806,19 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev) | |||
| 1802 | *rdev = btrfs_stack_inode_rdev(inode_item); | 1806 | *rdev = btrfs_stack_inode_rdev(inode_item); |
| 1803 | BTRFS_I(inode)->flags = btrfs_stack_inode_flags(inode_item); | 1807 | BTRFS_I(inode)->flags = btrfs_stack_inode_flags(inode_item); |
| 1804 | 1808 | ||
| 1805 | tspec = btrfs_inode_atime(inode_item); | 1809 | inode->i_atime.tv_sec = btrfs_stack_timespec_sec(&inode_item->atime); |
| 1806 | inode->i_atime.tv_sec = btrfs_stack_timespec_sec(tspec); | 1810 | inode->i_atime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->atime); |
| 1807 | inode->i_atime.tv_nsec = btrfs_stack_timespec_nsec(tspec); | 1811 | |
| 1812 | inode->i_mtime.tv_sec = btrfs_stack_timespec_sec(&inode_item->mtime); | ||
| 1813 | inode->i_mtime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->mtime); | ||
| 1808 | 1814 | ||
| 1809 | tspec = btrfs_inode_mtime(inode_item); | 1815 | inode->i_ctime.tv_sec = btrfs_stack_timespec_sec(&inode_item->ctime); |
| 1810 | inode->i_mtime.tv_sec = btrfs_stack_timespec_sec(tspec); | 1816 | inode->i_ctime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->ctime); |
| 1811 | inode->i_mtime.tv_nsec = btrfs_stack_timespec_nsec(tspec); | ||
| 1812 | 1817 | ||
| 1813 | tspec = btrfs_inode_ctime(inode_item); | 1818 | BTRFS_I(inode)->i_otime.tv_sec = |
| 1814 | inode->i_ctime.tv_sec = btrfs_stack_timespec_sec(tspec); | 1819 | btrfs_stack_timespec_sec(&inode_item->otime); |
| 1815 | inode->i_ctime.tv_nsec = btrfs_stack_timespec_nsec(tspec); | 1820 | BTRFS_I(inode)->i_otime.tv_nsec = |
| 1821 | btrfs_stack_timespec_nsec(&inode_item->otime); | ||
| 1816 | 1822 | ||
| 1817 | inode->i_generation = BTRFS_I(inode)->generation; | 1823 | inode->i_generation = BTRFS_I(inode)->generation; |
| 1818 | BTRFS_I(inode)->index_cnt = (u64)-1; | 1824 | BTRFS_I(inode)->index_cnt = (u64)-1; |
| @@ -1857,6 +1863,14 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode) | |||
| 1857 | { | 1863 | { |
| 1858 | struct btrfs_delayed_node *delayed_node; | 1864 | struct btrfs_delayed_node *delayed_node; |
| 1859 | 1865 | ||
| 1866 | /* | ||
| 1867 | * we don't do delayed inode updates during log recovery because it | ||
| 1868 | * leads to enospc problems. This means we also can't do | ||
| 1869 | * delayed inode refs | ||
| 1870 | */ | ||
| 1871 | if (BTRFS_I(inode)->root->fs_info->log_root_recovering) | ||
| 1872 | return -EAGAIN; | ||
| 1873 | |||
| 1860 | delayed_node = btrfs_get_or_create_delayed_node(inode); | 1874 | delayed_node = btrfs_get_or_create_delayed_node(inode); |
| 1861 | if (IS_ERR(delayed_node)) | 1875 | if (IS_ERR(delayed_node)) |
| 1862 | return PTR_ERR(delayed_node); | 1876 | return PTR_ERR(delayed_node); |
