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

Commit dc711ca3 authored by Al Viro's avatar Al Viro
Browse files

fix switch_names() breakage in short-to-short case



We want ->name.len to match the resulting name on *both*
source and target

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 7df5fa06
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -1616,8 +1616,11 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
			 */
			 */
			memcpy(dentry->d_iname, target->d_name.name,
			memcpy(dentry->d_iname, target->d_name.name,
					target->d_name.len + 1);
					target->d_name.len + 1);
			dentry->d_name.len = target->d_name.len;
			return;
		}
		}
	}
	}
	do_switch(dentry->d_name.len, target->d_name.len);
}
}


/*
/*
@@ -1677,7 +1680,6 @@ static void d_move_locked(struct dentry * dentry, struct dentry * target)


	/* Switch the names.. */
	/* Switch the names.. */
	switch_names(dentry, target);
	switch_names(dentry, target);
	do_switch(dentry->d_name.len, target->d_name.len);
	do_switch(dentry->d_name.hash, target->d_name.hash);
	do_switch(dentry->d_name.hash, target->d_name.hash);


	/* ... and switch the parents */
	/* ... and switch the parents */
@@ -1787,7 +1789,6 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon)
	struct dentry *dparent, *aparent;
	struct dentry *dparent, *aparent;


	switch_names(dentry, anon);
	switch_names(dentry, anon);
	do_switch(dentry->d_name.len, anon->d_name.len);
	do_switch(dentry->d_name.hash, anon->d_name.hash);
	do_switch(dentry->d_name.hash, anon->d_name.hash);


	dparent = dentry->d_parent;
	dparent = dentry->d_parent;