After r254627, the deupdate() started writing the directory entries to
disk. That has a side effect of corrupting the "." entries names on rename, since the call to createde() in the msdosfs_rename() sets the de_Name to the target name. If any change to the directory attributes is performed, the wrong name is written back to the on-disk direntry on update. Overwrite the de_Name for the directories on rename to correct the dot name. Submitted by: bde MFC after: 1 week
This commit is contained in:
parent
42b097602d
commit
08cf5ceb8e
@ -1240,6 +1240,17 @@ abortit:
|
||||
VOP_UNLOCK(fvp, 0);
|
||||
goto bad;
|
||||
}
|
||||
/*
|
||||
* If ip is for a directory, then its name should always
|
||||
* be "." since it is for the directory entry in the
|
||||
* directory itself (msdosfs_lookup() always translates
|
||||
* to the "." entry so as to get a unique denode, except
|
||||
* for the root directory there are different
|
||||
* complications). However, we just corrupted its name
|
||||
* to pass the correct name to createde(). Undo this.
|
||||
*/
|
||||
if ((ip->de_Attributes & ATTR_DIRECTORY) != 0)
|
||||
bcopy(oldname, ip->de_Name, 11);
|
||||
ip->de_refcnt++;
|
||||
zp->de_fndoffset = from_diroffset;
|
||||
error = removede(zp, ip);
|
||||
|
Loading…
x
Reference in New Issue
Block a user