From: Tejun Heo <htejun@gmail.com>
To: greg@kroah.com, dmitry.torokhov@gmail.com,
cornelia.huck@de.ibm.com, oneukum@suse.de, rpurdie@rpsys.net,
stern@rowland.harvard.edu, maneesh@in.ibm.com,
linux-kernel@vger.kernel.org, htejun@gmail.com
Cc: Tejun Heo <htejun@gmail.com>
Subject: [PATCH 06/11] sysfs: consolidate sysfs spinlocks
Date: Thu, 14 Jun 2007 04:27:23 +0900 [thread overview]
Message-ID: <11817628433935-git-send-email-htejun@gmail.com> (raw)
In-Reply-To: <1181762840495-git-send-email-htejun@gmail.com>
Replace sysfs_lock and kobj_sysfs_assoc_lock with sysfs_assoc_lock.
sysfs_lock was originally to be used to protect sysfs_dirent tree but
mutex seems better choice, so there is no reason to keep sysfs_lock
separate. Merge the two spinlocks into one.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
fs/sysfs/dir.c | 19 +++++++++----------
fs/sysfs/inode.c | 16 ++++++++--------
fs/sysfs/symlink.c | 6 +++---
fs/sysfs/sysfs.h | 3 +--
4 files changed, 21 insertions(+), 23 deletions(-)
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
index 950e679..663acee 100644
--- a/fs/sysfs/dir.c
+++ b/fs/sysfs/dir.c
@@ -15,8 +15,7 @@
#include "sysfs.h"
DECLARE_RWSEM(sysfs_rename_sem);
-spinlock_t sysfs_lock = SPIN_LOCK_UNLOCKED;
-spinlock_t kobj_sysfs_assoc_lock = SPIN_LOCK_UNLOCKED;
+spinlock_t sysfs_assoc_lock = SPIN_LOCK_UNLOCKED;
static spinlock_t sysfs_ino_lock = SPIN_LOCK_UNLOCKED;
static DEFINE_IDA(sysfs_ino_ida);
@@ -236,10 +235,10 @@ static void sysfs_d_iput(struct dentry * dentry, struct inode * inode)
struct sysfs_dirent * sd = dentry->d_fsdata;
if (sd) {
- /* sd->s_dentry is protected with sysfs_lock. This
- * allows sysfs_drop_dentry() to dereference it.
+ /* sd->s_dentry is protected with sysfs_assoc_lock.
+ * This allows sysfs_drop_dentry() to dereference it.
*/
- spin_lock(&sysfs_lock);
+ spin_lock(&sysfs_assoc_lock);
/* The dentry might have been deleted or another
* lookup could have happened updating sd->s_dentry to
@@ -248,7 +247,7 @@ static void sysfs_d_iput(struct dentry * dentry, struct inode * inode)
*/
if (sd->s_dentry == dentry)
sd->s_dentry = NULL;
- spin_unlock(&sysfs_lock);
+ spin_unlock(&sysfs_assoc_lock);
sysfs_put(sd);
}
iput(inode);
@@ -298,9 +297,9 @@ static void sysfs_attach_dentry(struct sysfs_dirent *sd, struct dentry *dentry)
dentry->d_fsdata = sysfs_get(sd);
/* protect sd->s_dentry against sysfs_d_iput */
- spin_lock(&sysfs_lock);
+ spin_lock(&sysfs_assoc_lock);
sd->s_dentry = dentry;
- spin_unlock(&sysfs_lock);
+ spin_unlock(&sysfs_assoc_lock);
d_rehash(dentry);
}
@@ -603,9 +602,9 @@ void sysfs_remove_dir(struct kobject * kobj)
{
struct sysfs_dirent *sd = kobj->sd;
- spin_lock(&kobj_sysfs_assoc_lock);
+ spin_lock(&sysfs_assoc_lock);
kobj->sd = NULL;
- spin_unlock(&kobj_sysfs_assoc_lock);
+ spin_unlock(&sysfs_assoc_lock);
__sysfs_remove_dir(sd);
}
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c
index 1be8537..e4c2393 100644
--- a/fs/sysfs/inode.c
+++ b/fs/sysfs/inode.c
@@ -211,11 +211,11 @@ void sysfs_instantiate(struct dentry *dentry, struct inode *inode)
* parent on entry to this function such that it can't be looked
* up anymore.
*
- * @sd->s_dentry which is protected with sysfs_lock points to the
- * currently associated dentry but we're not holding a reference
- * to it and racing with dput(). Grab dcache_lock and verify
- * dentry before dropping it. If @sd->s_dentry is NULL or dput()
- * beats us, no need to bother.
+ * @sd->s_dentry which is protected with sysfs_assoc_lock points
+ * to the currently associated dentry but we're not holding a
+ * reference to it and racing with dput(). Grab dcache_lock and
+ * verify dentry before dropping it. If @sd->s_dentry is NULL or
+ * dput() beats us, no need to bother.
*/
void sysfs_drop_dentry(struct sysfs_dirent *sd)
{
@@ -224,9 +224,9 @@ void sysfs_drop_dentry(struct sysfs_dirent *sd)
struct inode *inode;
/* We're not holding a reference to ->s_dentry dentry but the
- * field will stay valid as long as sysfs_lock is held.
+ * field will stay valid as long as sysfs_assoc_lock is held.
*/
- spin_lock(&sysfs_lock);
+ spin_lock(&sysfs_assoc_lock);
spin_lock(&dcache_lock);
/* drop dentry if it's there and dput() didn't kill it yet */
@@ -238,7 +238,7 @@ void sysfs_drop_dentry(struct sysfs_dirent *sd)
}
spin_unlock(&dcache_lock);
- spin_unlock(&sysfs_lock);
+ spin_unlock(&sysfs_assoc_lock);
dput(dentry);
/* XXX: unpin if directory, this will go away soon */
diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
index 43cc522..cbd95a4 100644
--- a/fs/sysfs/symlink.c
+++ b/fs/sysfs/symlink.c
@@ -82,12 +82,12 @@ int sysfs_create_link(struct kobject * kobj, struct kobject * target, const char
return -EFAULT;
/* target->sd can go away beneath us but is protected with
- * kobj_sysfs_assoc_lock. Fetch target_sd from it.
+ * sysfs_assoc_lock. Fetch target_sd from it.
*/
- spin_lock(&kobj_sysfs_assoc_lock);
+ spin_lock(&sysfs_assoc_lock);
if (target->sd)
target_sd = sysfs_get(target->sd);
- spin_unlock(&kobj_sysfs_assoc_lock);
+ spin_unlock(&sysfs_assoc_lock);
if (!target_sd)
return -ENOENT;
diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
index 27a5f4b..4572677 100644
--- a/fs/sysfs/sysfs.h
+++ b/fs/sysfs/sysfs.h
@@ -81,8 +81,7 @@ extern void sysfs_remove_subdir(struct sysfs_dirent *sd);
extern void sysfs_drop_dentry(struct sysfs_dirent *sd);
extern int sysfs_setattr(struct dentry *dentry, struct iattr *iattr);
-extern spinlock_t sysfs_lock;
-extern spinlock_t kobj_sysfs_assoc_lock;
+extern spinlock_t sysfs_assoc_lock;
extern struct rw_semaphore sysfs_rename_sem;
extern struct super_block * sysfs_sb;
extern const struct file_operations sysfs_dir_operations;
--
1.5.0.3
next prev parent reply other threads:[~2007-06-13 19:29 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-13 19:27 [PATCHSET 2.6.22-rc4-mm2] sysfs: make directory dentries/inodes reclaimable, take#2 Tejun Heo
2007-06-13 19:27 ` [PATCH 02/11] sysfs: rename sysfs_dirent->s_type to s_flags and make room for flags Tejun Heo
2007-06-13 19:27 ` [PATCH 01/11] sysfs: make sysfs_drop_dentry() access inodes using ilookup() Tejun Heo
2007-06-13 19:27 ` [PATCH 04/11] sysfs: implement sysfs_find_dirent() and sysfs_get_dirent() Tejun Heo
2007-06-13 19:27 ` [PATCH 03/11] sysfs: implement SYSFS_FLAG_REMOVED flag Tejun Heo
2007-06-13 19:27 ` [PATCH 05/11] sysfs: make kobj point to sysfs_dirent instead of dentry Tejun Heo
2007-06-13 19:27 ` Tejun Heo [this message]
2007-06-13 19:27 ` [PATCH 07/11] sysfs: use sysfs_mutex to protect the sysfs_dirent tree Tejun Heo
2007-06-13 19:27 ` [PATCH 09/11] sysfs: move sysfs_drop_dentry() to dir.c and make it static Tejun Heo
2007-06-13 19:27 ` [PATCH 08/11] sysfs: restructure add/remove paths and fix inode update Tejun Heo
2007-06-13 19:27 ` [PATCH 11/11] sysfs: make directory dentries and inodes reclaimable Tejun Heo
2007-06-13 19:27 ` [PATCH 10/11] sysfs: implement sysfs_get_dentry() Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11817628433935-git-send-email-htejun@gmail.com \
--to=htejun@gmail.com \
--cc=cornelia.huck@de.ibm.com \
--cc=dmitry.torokhov@gmail.com \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maneesh@in.ibm.com \
--cc=oneukum@suse.de \
--cc=rpurdie@rpsys.net \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.