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

Commit 1d58b27b authored by Anton Altaparmakov's avatar Anton Altaparmakov
Browse files

NTFS: Change the runlist terminator of the newly allocated cluster(s) to


      LCN_ENOENT in ntfs_attr_make_non_resident().  Otherwise the runlist
      code gets confused.

Signed-off-by: default avatarAnton Altaparmakov <aia21@cantab.net>
parent 3bd1f4a1
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -132,6 +132,9 @@ ToDo/Notes:
	  with a 64-bit variable and a int, i.e. 32-bit, constant.  This causes
	  the higher order 32-bits of the 64-bit variable to be zeroed.  To fix
	  this cast the 'const' to the same 64-bit type as 'var'.
	- Change the runlist terminator of the newly allocated cluster(s) to
	  LCN_ENOENT in ntfs_attr_make_non_resident().  Otherwise the runlist
	  code gets confused.

2.1.22 - Many bug and race fixes and error handling improvements.

+8 −0
Original line number Diff line number Diff line
@@ -1285,6 +1285,8 @@ int ntfs_attr_make_non_resident(ntfs_inode *ni)
	new_size = (i_size_read(vi) + vol->cluster_size - 1) &
			~(vol->cluster_size - 1);
	if (new_size > 0) {
		runlist_element *rl2;

		/*
		 * Will need the page later and since the page lock nests
		 * outside all ntfs locks, we need to get the page now.
@@ -1304,6 +1306,12 @@ int ntfs_attr_make_non_resident(ntfs_inode *ni)
					err);
			goto page_err_out;
		}
		/* Change the runlist terminator to LCN_ENOENT. */
		rl2 = rl;
		while (rl2->length)
			rl2++;
		BUG_ON(rl2->lcn != LCN_RL_NOT_MAPPED);
		rl2->lcn = LCN_ENOENT;
	} else {
		rl = NULL;
		page = NULL;