summaryrefslogtreecommitdiff
path: root/nuttx/ChangeLog
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-11-28 13:12:14 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-11-28 13:12:14 -0600
commit89bb53cf38e7db693ef1b21e071425cbc2e8b999 (patch)
tree21ce361d9fe5ac99e2f3743999ca454bfcf55278 /nuttx/ChangeLog
parenta9046d78f00853c60ee649816dea99df45b4e340 (diff)
downloadnuttx-89bb53cf38e7db693ef1b21e071425cbc2e8b999.tar.gz
nuttx-89bb53cf38e7db693ef1b21e071425cbc2e8b999.tar.bz2
nuttx-89bb53cf38e7db693ef1b21e071425cbc2e8b999.zip
Inode semaphore must be entrant or a deadlock can occur in certain scenarios
Diffstat (limited to 'nuttx/ChangeLog')
-rw-r--r--nuttx/ChangeLog9
1 files changed, 9 insertions, 0 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index e8c812bca..6b8bf1cb9 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -6123,3 +6123,12 @@
src/stm32f429i-disco-internal.h, up_nsh.c, and up_spi.h: Add a
configuration and board support for an external SST25 FLASH. From Ken
Pettit (2013-11-28).
+ * fs/fs_inode.c: The inode semaphore must be re-entrant. Here is the
+ re-entering path that I found: (1) USB host connects to FLASH drive
+ and creates /dev/sda, (2) /dev/sda is mounted, (3) FLASH drive is
+ removed but /dev/sda is not destroyed because there is still a\
+ reference on the device because of the mount, (4) umount() is called,
+ taking the inode semaphore, now the driver tries to destroy the block
+ driver by calling unregister_blockdriver(). But (5)
+ unregister_blockdriver() also takes the inode semaphore causing a
+ deadlock if the inode semaphore is not re-entry. (2013-11-28).