NTFS: Make ntfs_write_block() not instantiate sparse blocks if they are zero.
Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
This commit is contained in:
parent
67bb103725
commit
8dcdebafb8
|
@ -77,6 +77,8 @@ ToDo/Notes:
|
|||
updating the times in the inode in ntfs_setattr().
|
||||
- Fixup handling of sparse, compressed, and encrypted attributes in
|
||||
fs/ntfs/inode.c::ntfs_read_locked_{,attr_,index_}inode().
|
||||
- Make ntfs_write_block() not instantiate sparse blocks if they contain
|
||||
only zeroes.
|
||||
|
||||
2.1.23 - Implement extension of resident files and make writing safe as well as
|
||||
many bug fixes, cleanups, and enhancements...
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue