This moves the delalloc space reservation done for O_DIRECT
into btrfs_direct_IO.  This way we don't leak reserved space
if the generic O_DIRECT write code errors out before it
calls into btrfs_direct_IO.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
        BTRFS_I(inode)->sequence++;
 
        if (unlikely(file->f_flags & O_DIRECT)) {
-               ret = btrfs_delalloc_reserve_space(inode, count);
-               if (ret)
-                       goto out;
-
                num_written = generic_file_direct_write(iocb, iov, &nr_segs,
                                                        pos, ppos, count,
                                                        ocount);
-
                /*
                 * the generic O_DIRECT will update in-memory i_size after the
                 * DIOs are done.  But our endio handlers that update the on
 
        ssize_t ret;
        int writing = rw & WRITE;
        int write_bits = 0;
+       size_t count = iov_length(iov, nr_segs);
 
        lockstart = offset;
-       lockend = offset + iov_length(iov, nr_segs) - 1;
+       lockend = offset + count - 1;
+
+       if (writing) {
+               ret = btrfs_delalloc_reserve_space(inode, count);
+               if (ret)
+                       goto out;
+       }
 
        while (1) {
                lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend,