Louis Rilling 4768e9b18d [PATCH] configfs: Fix symlink() to a removing item
The rule for configfs symlinks is that symlinks always point to valid
config_items, and prevent the target from being removed. However,
configfs_symlink() only checks that it can grab a reference on the target item,
without ensuring that it remains alive until the symlink is correctly attached.

This patch makes configfs_symlink() fail whenever the target is being removed,
using the CONFIGFS_USET_DROPPING flag set by configfs_detach_prep() and
protected by configfs_dirent_lock.

This patch introduces a similar (weird?) behavior as with mkdir failures making
rmdir fail: if symlink() races with rmdir() of the parent directory (or its
youngest user-created ancestor if parent is a default group) or rmdir() of the
target directory, and then fails in configfs_create(), this can make the racing
rmdir() fail despite the concerned directory having no user-created entry (resp.
no symlink pointing to it or one of its default groups) in the end.
This behavior is fixed in later patches.

Signed-off-by: Louis Rilling <louis.rilling@kerlabs.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
2008-07-31 16:21:12 -07:00
..
2008-07-03 09:59:03 -05:00
2008-07-26 20:53:40 -04:00
2008-07-24 10:47:33 -07:00
2008-07-26 20:53:40 -04:00
2008-07-26 20:53:40 -04:00
2008-07-25 10:53:34 -07:00
2008-07-30 09:41:46 -07:00
2008-07-04 09:52:14 +02:00
2008-07-26 12:00:07 -07:00
2008-07-25 10:53:34 -07:00
2008-07-26 20:53:40 -04:00
2008-07-26 12:00:08 -07:00
2008-07-26 12:00:08 -07:00
2008-07-26 12:00:08 -07:00
2008-07-26 12:00:08 -07:00
2008-07-26 12:00:06 -07:00
2008-07-26 12:00:06 -07:00
2008-07-26 20:53:45 -04:00
2008-07-26 20:53:40 -04:00
2008-07-26 20:53:45 -04:00
2008-07-14 19:10:52 +03:00
2008-07-26 12:00:05 -07:00
2008-07-28 18:10:28 +09:00
2008-07-26 12:00:05 -07:00
2008-07-26 20:53:45 -04:00
2008-07-25 10:53:35 -07:00
2008-07-02 15:06:27 -06:00