btrfs fixes from next
[opensuse:kernel-source.git] / patches.suse / btrfs-8134-update-last-trans-if-we-don-t-update-the-inode.patch
1 From: Josef Bacik <jbacik@fusionio.com>
2 Date: Mon, 13 Aug 2012 15:43:26 -0400
3 Patch-mainline: pending
4 References: FATE#306586
5 Subject: [PATCH] Btrfs: update last trans if we don't update the inode
6
7 There is a completely impossible situation to hit where you can preallocate
8 a file, fsync it, write into the preallocated region, have the transaction
9 commit twice and then fsync and then immediately lose power and lose all of
10 the contents of the write.  This patch fixes this just so I feel better
11 about the situation and because it is lightweight, we just update the
12 last_trans when we finish an ordered IO and we don't update the inode
13 itself.  This way we are completely safe and I feel better.  Thanks,
14
15 Signed-off-by: Josef Bacik <jbacik@fusionio.com>
16 Signed-off-by: David Sterba <dsterba@suse.cz>
17 ---
18  fs/btrfs/inode.c |    2 ++
19  1 file changed, 2 insertions(+)
20
21 --- a/fs/btrfs/inode.c
22 +++ b/fs/btrfs/inode.c
23 @@ -1973,6 +1973,8 @@ static int btrfs_finish_ordered_io(struc
24                         btrfs_abort_transaction(trans, root, ret);
25                         goto out;
26                 }
27 +       } else {
28 +               btrfs_set_inode_last_trans(trans, inode);
29         }
30         ret = 0;
31  out: