Btrfs: only cow in get_block when create==1
authorChris Mason <chris.mason@oracle.com>
Tue, 10 Apr 2007 17:51:41 +0000 (13:51 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Tue, 10 Apr 2007 17:51:41 +0000 (13:51 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/super.c

index 91aa1b4c50af883f60e9202a6eab2e6a451c4bda..a3183972f31025d01ac3dc3f7fd3f3518a68c0d6 100644 (file)
@@ -1020,7 +1020,7 @@ static int btrfs_get_block_lock(struct inode *inode, sector_t iblock,
 
        ret = btrfs_lookup_file_extent(trans, root, path,
                                       inode->i_ino,
-                                      iblock << inode->i_blkbits, 1);
+                                      iblock << inode->i_blkbits, create);
        if (ret < 0) {
                err = ret;
                goto out;
@@ -1046,7 +1046,8 @@ static int btrfs_get_block_lock(struct inode *inode, sector_t iblock,
        if (ret == 0) {
                err = 0;
                BUG_ON(btrfs_file_extent_disk_num_blocks(item) != 1);
-               if (btrfs_file_extent_generation(item) != trans->transid) {
+               if (create &&
+                   btrfs_file_extent_generation(item) != trans->transid) {
                        struct btrfs_key ins;
                        ret = btrfs_alloc_extent(trans, root, 1,
                                                 blocknr, (u64)-1, &ins);