fs/vfs: fix case when file to rename does not exist
Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com>
This commit is contained in:
parent
4e3aa83706
commit
969a06331f
@ -397,17 +397,30 @@ next_subdir:
|
|||||||
|
|
||||||
goto next_subdir;
|
goto next_subdir;
|
||||||
}
|
}
|
||||||
else if (oldinode->u.i_mops->unlink)
|
else
|
||||||
{
|
{
|
||||||
/* No.. newrelpath must refer to a regular file. Attempt
|
/* No.. newrelpath must refer to a regular file. Make sure
|
||||||
* to remove the file before doing the rename.
|
* that the file at the olrelpath actually exists before
|
||||||
*
|
* performing any further actions with newrelpath
|
||||||
* NOTE that errors are not handled here. If we failed to
|
|
||||||
* remove the file, then the file system 'rename' method
|
|
||||||
* should check that.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
oldinode->u.i_mops->unlink(oldinode, newrelpath);
|
ret = oldinode->u.i_mops->stat(oldinode, oldrelpath, &buf);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
goto errout_with_newinode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldinode->u.i_mops->unlink)
|
||||||
|
{
|
||||||
|
/* Attempt to remove the file before doing the rename.
|
||||||
|
*
|
||||||
|
* NOTE that errors are not handled here. If we failed
|
||||||
|
* to remove the file, then the file system 'rename'
|
||||||
|
* method should check that.
|
||||||
|
*/
|
||||||
|
|
||||||
|
oldinode->u.i_mops->unlink(oldinode, newrelpath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user