Commit 3ffc5a44 authored by Anton Altaparmakov's avatar Anton Altaparmakov
Browse files

NTFS: Change ntfs_rl_truncate_nolock() to throw away the runlist if the new


      length is zero.

Signed-off-by: default avatarAnton Altaparmakov <aia21@cantab.net>
parent f94ad38e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ ToDo/Notes:
	- Report unrepresentable inodes during ntfs_readdir() as KERN_WARNING
	  messages and include the inode number.  Thanks to Yura Pakhuchiy for
	  pointing this out.
	- Change ntfs_rl_truncate_nolock() to throw away the runlist if the new
	  length is zero.

2.1.23 - Implement extension of resident files and make writing safe as well as
	 many bug fixes, cleanups, and enhancements...
+13 −1
Original line number Diff line number Diff line
@@ -1455,6 +1455,7 @@ err_out:

/**
 * ntfs_rl_truncate_nolock - truncate a runlist starting at a specified vcn
 * @vol:	ntfs volume (needed for error output)
 * @runlist:	runlist to truncate
 * @new_length:	the new length of the runlist in VCNs
 *
@@ -1462,12 +1463,16 @@ err_out:
 * holding the runlist elements to a length of @new_length VCNs.
 *
 * If @new_length lies within the runlist, the runlist elements with VCNs of
 * @new_length and above are discarded.
 * @new_length and above are discarded.  As a special case if @new_length is
 * zero, the runlist is discarded and set to NULL.
 *
 * If @new_length lies beyond the runlist, a sparse runlist element is added to
 * the end of the runlist @runlist or if the last runlist element is a sparse
 * one already, this is extended.
 *
 * Note, no checking is done for unmapped runlist elements.  It is assumed that
 * the caller has mapped any elements that need to be mapped already.
 *
 * Return 0 on success and -errno on error.
 *
 * Locking: The caller must hold @runlist->lock for writing.
@@ -1482,6 +1487,13 @@ int ntfs_rl_truncate_nolock(const ntfs_volume *vol, runlist *const runlist,
	BUG_ON(!runlist);
	BUG_ON(new_length < 0);
	rl = runlist->rl;
	if (!new_length) {
		ntfs_debug("Freeing runlist.");
		runlist->rl = NULL;
		if (rl)
			ntfs_free(rl);
		return 0;
	}
	if (unlikely(!rl)) {
		/*
		 * Create a runlist consisting of a sparse runlist element of