projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sysfs: make kobj point to sysfs_dirent instead of dentry
[powerpc.git]
/
fs
/
sysfs
/
group.c
diff --git
a/fs/sysfs/group.c
b/fs/sysfs/group.c
index
122145b
..
f318b73
100644
(file)
--- a/
fs/sysfs/group.c
+++ b/
fs/sysfs/group.c
@@
-13,29
+13,30
@@
#include <linux/dcache.h>
#include <linux/namei.h>
#include <linux/err.h>
#include <linux/dcache.h>
#include <linux/namei.h>
#include <linux/err.h>
+#include <linux/fs.h>
+#include <asm/semaphore.h>
#include "sysfs.h"
#include "sysfs.h"
-static void remove_files(struct
dentry * dir,
- const struct attribute_group *
grp)
+static void remove_files(struct
sysfs_dirent *dir_sd,
+ const struct attribute_group *grp)
{
struct attribute *const* attr;
for (attr = grp->attrs; *attr; attr++)
{
struct attribute *const* attr;
for (attr = grp->attrs; *attr; attr++)
- sysfs_hash_and_remove(dir
,
(*attr)->name);
+ sysfs_hash_and_remove(dir
_sd,
(*attr)->name);
}
}
-static int create_files(struct
dentry * dir
,
- const struct attribute_group *
grp)
+static int create_files(struct
sysfs_dirent *dir_sd
,
+ const struct attribute_group *grp)
{
struct attribute *const* attr;
int error = 0;
{
struct attribute *const* attr;
int error = 0;
- for (attr = grp->attrs; *attr && !error; attr++) {
- error = sysfs_add_file(dir, *attr, SYSFS_KOBJ_ATTR);
- }
+ for (attr = grp->attrs; *attr && !error; attr++)
+ error = sysfs_add_file(dir_sd, *attr, SYSFS_KOBJ_ATTR);
if (error)
if (error)
- remove_files(dir
,
grp);
+ remove_files(dir
_sd,
grp);
return error;
}
return error;
}
@@
-43,42
+44,44
@@
static int create_files(struct dentry * dir,
int sysfs_create_group(struct kobject * kobj,
const struct attribute_group * grp)
{
int sysfs_create_group(struct kobject * kobj,
const struct attribute_group * grp)
{
- struct
dentry * dir
;
+ struct
sysfs_dirent *sd
;
int error;
int error;
- BUG_ON(!kobj || !kobj->
dentry
);
+ BUG_ON(!kobj || !kobj->
sd
);
if (grp->name) {
if (grp->name) {
- error = sysfs_create_subdir(kobj,
grp->name,&dir
);
+ error = sysfs_create_subdir(kobj,
grp->name, &sd
);
if (error)
return error;
} else
if (error)
return error;
} else
- dir = kobj->dentry;
- dir = dget(dir);
- if ((error = create_files(dir,grp))) {
+ sd = kobj->sd;
+ sysfs_get(sd);
+ error = create_files(sd, grp);
+ if (error) {
if (grp->name)
if (grp->name)
- sysfs_remove_subdir(
dir
);
+ sysfs_remove_subdir(
sd
);
}
}
-
dput(dir
);
+
sysfs_put(sd
);
return error;
}
void sysfs_remove_group(struct kobject * kobj,
const struct attribute_group * grp)
{
return error;
}
void sysfs_remove_group(struct kobject * kobj,
const struct attribute_group * grp)
{
- struct dentry * dir;
+ struct sysfs_dirent *dir_sd = kobj->sd;
+ struct sysfs_dirent *sd;
- if (grp->name)
- dir = lookup_one_len(grp->name, kobj->dentry,
-
strlen(grp->name)
);
- else
-
dir = dget(kobj->dentry
);
+ if (grp->name)
{
+ sd = sysfs_get_dirent(dir_sd, grp->name);
+
BUG_ON(!sd
);
+
}
else
+
sd = sysfs_get(dir_sd
);
- remove_files(
dir,
grp);
+ remove_files(
sd,
grp);
if (grp->name)
if (grp->name)
- sysfs_remove_subdir(
dir
);
- /* release the ref. taken in this routine */
-
dput(dir
);
+ sysfs_remove_subdir(
sd
);
+
+
sysfs_put(sd
);
}
}