Teach sysfs_update_file how to handle multiple sysfs
superblocks.  Again we are just iterating over the superblocks
to so all of the filesystem modification notifications work
as expected.

Signed-off-by: Eric W. Biederman <[EMAIL PROTECTED]>
---
 fs/sysfs/file.c |   35 +++++++++++++++++++++--------------
 1 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index cff054f..1e6f9df 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -462,7 +462,8 @@ EXPORT_SYMBOL_GPL(sysfs_add_file_to_group);
 int sysfs_update_file(struct kobject * kobj, const struct attribute * attr)
 {
        struct sysfs_dirent *victim_sd = NULL;
-       struct dentry *victim = NULL;
+       struct super_block *sb;
+       struct dentry *victim;
        int rc;
 
        rc = -ENOENT;
@@ -471,21 +472,27 @@ int sysfs_update_file(struct kobject * kobj, const struct 
attribute * attr)
                goto out;
 
        mutex_lock(&sysfs_rename_mutex);
-       victim = sysfs_get_dentry(sysfs_sb, victim_sd);
-       mutex_unlock(&sysfs_rename_mutex);
-       if (IS_ERR(victim)) {
-               rc = PTR_ERR(victim);
-               victim = NULL;
-               goto out;
+       sysfs_grab_supers();
+       list_for_each_entry(sb, &sysfs_fs_type.fs_supers, s_instances) {
+               victim = sysfs_get_dentry(sb, victim_sd);
+               if (!victim)
+                       continue;
+               if (IS_ERR(victim)) {
+                       rc = PTR_ERR(victim);
+                       victim = NULL;
+                       goto out_unlock;
+               }
+               mutex_lock(&victim->d_inode->i_mutex);
+               victim->d_inode->i_mtime = CURRENT_TIME;
+               fsnotify_modify(victim);
+               mutex_unlock(&victim->d_inode->i_mutex);
+               rc = 0;
+               dput(victim);
        }
-
-       mutex_lock(&victim->d_inode->i_mutex);
-       victim->d_inode->i_mtime = CURRENT_TIME;
-       fsnotify_modify(victim);
-       mutex_unlock(&victim->d_inode->i_mutex);
-       rc = 0;
+ out_unlock:
+       sysfs_release_supers();
+       mutex_unlock(&sysfs_rename_mutex);
  out:
-       dput(victim);
        sysfs_put(victim_sd);
        return rc;
 }
-- 
1.5.1.1.181.g2de0

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to