Fix error in mount() error handling
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2271 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
e252d9d752
commit
d209d47e16
@ -964,4 +964,11 @@
|
|||||||
NOTE: On initial check-in, mmcsd_sdio.c and stm32_sdio.c are merely
|
NOTE: On initial check-in, mmcsd_sdio.c and stm32_sdio.c are merely
|
||||||
skeleton frameworks for the driver.
|
skeleton frameworks for the driver.
|
||||||
|
|
||||||
|
* fs/fs_mount.c -- Correct error handling logic. If the bind() method
|
||||||
|
fails, then a reserved node is left in the tree. This causes subsequent
|
||||||
|
attempts to mount at the location to fail (reporting that the node
|
||||||
|
already exists). This is a probably for block drivers for removable
|
||||||
|
media: The bind method could fail repeatedly until media is asserted.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<tr align="center" bgcolor="#e4e4e4">
|
<tr align="center" bgcolor="#e4e4e4">
|
||||||
<td>
|
<td>
|
||||||
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
|
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
|
||||||
<p>Last Updated: November 11, 2009</p>
|
<p>Last Updated: November 18, 2009</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -1612,6 +1612,12 @@ nuttx-0.4.14 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
|||||||
NOTE: On initial check-in, mmcsd_sdio.c and stm32_sdio.c are merely
|
NOTE: On initial check-in, mmcsd_sdio.c and stm32_sdio.c are merely
|
||||||
skeleton frameworks for the driver.
|
skeleton frameworks for the driver.
|
||||||
|
|
||||||
|
* fs/fs_mount.c -- Correct error handling logic. If the bind() method
|
||||||
|
fails, then a reserved node is left in the tree. This causes subsequent
|
||||||
|
attempts to mount at the location to fail (reporting that the node
|
||||||
|
already exists). This is a probably for block drivers for removable
|
||||||
|
media: The bind method could fail repeatedly until media is asserted.
|
||||||
|
|
||||||
pascal-0.1.3 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
pascal-0.1.3 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||||
|
|
||||||
buildroot-0.1.8 2009-xx-xx <spudmonkey@racsa.co.cr>
|
buildroot-0.1.8 2009-xx-xx <spudmonkey@racsa.co.cr>
|
||||||
|
@ -227,9 +227,13 @@ int mount(const char *source, const char *target,
|
|||||||
status = mops->bind(blkdrvr_inode, data, &fshandle);
|
status = mops->bind(blkdrvr_inode, data, &fshandle);
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
{
|
{
|
||||||
/* The inode is unhappy with the blkdrvr for some reason */
|
/* The inode is unhappy with the blkdrvr for some reason. Back out
|
||||||
|
* the count for the reference we failed to pass and exit with an
|
||||||
|
* error.
|
||||||
|
*/
|
||||||
|
|
||||||
fdbg("Bind method failed: %d\n", status);
|
fdbg("Bind method failed: %d\n", status);
|
||||||
|
blkdrvr_inode->i_crefs--;
|
||||||
errcode = -status;
|
errcode = -status;
|
||||||
goto errout_with_mountpt;
|
goto errout_with_mountpt;
|
||||||
}
|
}
|
||||||
@ -257,6 +261,8 @@ int mount(const char *source, const char *target,
|
|||||||
/* A lot of goto's! But they make the error handling much simpler */
|
/* A lot of goto's! But they make the error handling much simpler */
|
||||||
|
|
||||||
errout_with_mountpt:
|
errout_with_mountpt:
|
||||||
|
mountpt_inode->i_crefs = 0;
|
||||||
|
inode_remove(target);
|
||||||
inode_semgive();
|
inode_semgive();
|
||||||
inode_release(blkdrvr_inode);
|
inode_release(blkdrvr_inode);
|
||||||
inode_release(mountpt_inode);
|
inode_release(mountpt_inode);
|
||||||
|
Loading…
Reference in New Issue
Block a user