mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
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: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7df5fa06de
commit
dc711ca35f
1 changed files with 3 additions and 2 deletions
|
@ -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 @@ already_unhashed:
|
||||||
|
|
||||||
/* 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;
|
||||||
|
|
Loading…
Reference in a new issue