aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorJosef Bacik <josef@redhat.com>2011-03-22 11:00:46 -0400
committerChris Mason <chris.mason@oracle.com>2011-03-25 19:08:18 -0400
commit98bc3149fad639c8f50c7110b961a2a2fe085eed (patch)
tree76b102e79a9adde87c4e93f475db643567c393da /fs
parent4e69b598f6cfb0940b75abf7e179d6020e94ad1e (diff)
Btrfs: don't allocate dip->csums when doing writes
When doing direct writes we store the checksums in the ordered sum stuff in the ordered extent for writing them when the write completes, so we don't even use the dip->csums array. So if we're writing, don't bother allocating dip->csums since we won't use it anyway. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/inode.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index e010000d4bc9..570cd44fe91b 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -5944,6 +5944,7 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
5944 int nr_pages = 0; 5944 int nr_pages = 0;
5945 u32 *csums = dip->csums; 5945 u32 *csums = dip->csums;
5946 int ret = 0; 5946 int ret = 0;
5947 int write = rw & REQ_WRITE;
5947 5948
5948 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS); 5949 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS);
5949 if (!bio) 5950 if (!bio)
@@ -5980,7 +5981,8 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
5980 goto out_err; 5981 goto out_err;
5981 } 5982 }
5982 5983
5983 if (!skip_sum) 5984 /* Write's use the ordered csums */
5985 if (!write && !skip_sum)
5984 csums = csums + nr_pages; 5986 csums = csums + nr_pages;
5985 start_sector += submit_len >> 9; 5987 start_sector += submit_len >> 9;
5986 file_offset += submit_len; 5988 file_offset += submit_len;
@@ -6048,7 +6050,8 @@ static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode,
6048 } 6050 }
6049 dip->csums = NULL; 6051 dip->csums = NULL;
6050 6052
6051 if (!skip_sum) { 6053 /* Write's use the ordered csum stuff, so we don't need dip->csums */
6054 if (!write && !skip_sum) {
6052 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS); 6055 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS);
6053 if (!dip->csums) { 6056 if (!dip->csums) {
6054 kfree(dip); 6057 kfree(dip);