diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-19 17:36:00 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-19 17:36:00 -0500 |
commit | 2b9fb532d4168e8974fe49709e2c4c8d5352a64c (patch) | |
tree | 610cbe2d1bb32e28db135a767f158ade31452e2e /fs/btrfs/delayed-inode.c | |
parent | 4533f6e27a366ecc3da4876074ebfe0cc0ea4f0f (diff) | |
parent | a742994aa2e271eb8cd8e043d276515ec858ed73 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
Pull btrfs updates from Chris Mason:
"This pull is mostly cleanups and fixes:
- The raid5/6 cleanups from Zhao Lei fixup some long standing warts
in the code and add improvements on top of the scrubbing support
from 3.19.
- Josef has round one of our ENOSPC fixes coming from large btrfs
clusters here at FB.
- Dave Sterba continues a long series of cleanups (thanks Dave), and
Filipe continues hammering on corner cases in fsync and others
This all was held up a little trying to track down a use-after-free in
btrfs raid5/6. It's not clear yet if this is just made easier to
trigger with this pull or if its a new bug from the raid5/6 cleanups.
Dave Sterba is the only one to trigger it so far, but he has a
consistent way to reproduce, so we'll get it nailed shortly"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (68 commits)
Btrfs: don't remove extents and xattrs when logging new names
Btrfs: fix fsync data loss after adding hard link to inode
Btrfs: fix BUG_ON in btrfs_orphan_add() when delete unused block group
Btrfs: account for large extents with enospc
Btrfs: don't set and clear delalloc for O_DIRECT writes
Btrfs: only adjust outstanding_extents when we do a short write
btrfs: Fix out-of-space bug
Btrfs: scrub, fix sleep in atomic context
Btrfs: fix scheduler warning when syncing log
Btrfs: Remove unnecessary placeholder in btrfs_err_code
btrfs: cleanup init for list in free-space-cache
btrfs: delete chunk allocation attemp when setting block group ro
btrfs: clear bio reference after submit_one_bio()
Btrfs: fix scrub race leading to use-after-free
Btrfs: add missing cleanup on sysfs init failure
Btrfs: fix race between transaction commit and empty block group removal
btrfs: add more checks to btrfs_read_sys_array
btrfs: cleanup, rename a few variables in btrfs_read_sys_array
btrfs: add checks for sys_chunk_array sizes
btrfs: more superblock checks, lower bounds on devices and sectorsize/nodesize
...
Diffstat (limited to 'fs/btrfs/delayed-inode.c')
-rw-r--r-- | fs/btrfs/delayed-inode.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index de4e70fb3cbb..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; |