Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8dcdebaf authored by Anton Altaparmakov's avatar Anton Altaparmakov
Browse files

NTFS: Make ntfs_write_block() not instantiate sparse blocks if they are zero.

parent 67bb1037
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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...
+21 −0
Original line number Diff line number Diff line
@@ -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);