Signed-off-by: Chris Mason <chris.mason@oracle.com>
 
        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;
        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);