From 8dcdebafb848415eae25924b00c4f0b9ec907da0 Mon Sep 17 00:00:00 2001 From: Anton Altaparmakov Date: Thu, 8 Sep 2005 21:25:48 +0100 Subject: NTFS: Make ntfs_write_block() not instantiate sparse blocks if they are zero. Signed-off-by: Anton Altaparmakov --- fs/ntfs/aops.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'fs/ntfs/aops.c') diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c index 78adad7a988..f3ad36d8b8c 100644 --- a/fs/ntfs/aops.c +++ b/fs/ntfs/aops.c @@ -670,6 +670,27 @@ lock_retry_remap: } /* It is a hole, need to instantiate it. */ if (lcn == LCN_HOLE) { + u8 *kaddr; + unsigned long *bpos, *bend; + + /* Check if the buffer is zero. */ + kaddr = kmap_atomic(page, KM_USER0); + bpos = (unsigned long *)(kaddr + bh_offset(bh)); + bend = (unsigned long *)((u8*)bpos + blocksize); + do { + if (unlikely(*bpos)) + break; + } while (likely(++bpos < bend)); + kunmap_atomic(kaddr, KM_USER0); + if (bpos == bend) { + /* + * Buffer is zero and sparse, no need to write + * it. + */ + bh->b_blocknr = -1; + clear_buffer_dirty(bh); + continue; + } // TODO: Instantiate the hole. // clear_buffer_new(bh); // unmap_underlying_metadata(bh->b_bdev, bh->b_blocknr); -- cgit v1.2.3-18-g5258