diff options
| author | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-25 12:26:59 -0400 |
|---|---|---|
| committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-25 12:26:59 -0400 |
| commit | 363e065c02b1273364d5356711a83e7f548fc0c8 (patch) | |
| tree | 0df0e65da403ade33ade580c2770c97437b1b1af /fs/configfs | |
| parent | 907b9bceb41fa46beae93f79cc4a2247df502c0f (diff) | |
| parent | 7c250413e5b7c3dfae89354725b70c76d7621395 (diff) | |
[GFS2] Fix up merge of Linus' kernel into GFS2
This fixes up a couple of conflicts when merging up with
Linus' latest kernel. This will hopefully allow GFS2 to
be more easily merged into forthcoming -mm and FC kernels
due to the "one line per header" format now used for the
kernel headers.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Conflicts:
include/linux/Kbuild
include/linux/kernel.h
Diffstat (limited to 'fs/configfs')
| -rw-r--r-- | fs/configfs/dir.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c index df025453dd97..816e8ef64560 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c | |||
| @@ -86,6 +86,32 @@ static struct configfs_dirent *configfs_new_dirent(struct configfs_dirent * pare | |||
| 86 | return sd; | 86 | return sd; |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | /* | ||
| 90 | * | ||
| 91 | * Return -EEXIST if there is already a configfs element with the same | ||
| 92 | * name for the same parent. | ||
| 93 | * | ||
| 94 | * called with parent inode's i_mutex held | ||
| 95 | */ | ||
| 96 | int configfs_dirent_exists(struct configfs_dirent *parent_sd, | ||
| 97 | const unsigned char *new) | ||
| 98 | { | ||
| 99 | struct configfs_dirent * sd; | ||
| 100 | |||
| 101 | list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { | ||
| 102 | if (sd->s_element) { | ||
| 103 | const unsigned char *existing = configfs_get_name(sd); | ||
| 104 | if (strcmp(existing, new)) | ||
| 105 | continue; | ||
| 106 | else | ||
| 107 | return -EEXIST; | ||
| 108 | } | ||
| 109 | } | ||
| 110 | |||
| 111 | return 0; | ||
| 112 | } | ||
| 113 | |||
| 114 | |||
| 89 | int configfs_make_dirent(struct configfs_dirent * parent_sd, | 115 | int configfs_make_dirent(struct configfs_dirent * parent_sd, |
| 90 | struct dentry * dentry, void * element, | 116 | struct dentry * dentry, void * element, |
| 91 | umode_t mode, int type) | 117 | umode_t mode, int type) |
| @@ -136,8 +162,10 @@ static int create_dir(struct config_item * k, struct dentry * p, | |||
| 136 | int error; | 162 | int error; |
| 137 | umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; | 163 | umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; |
| 138 | 164 | ||
| 139 | error = configfs_make_dirent(p->d_fsdata, d, k, mode, | 165 | error = configfs_dirent_exists(p->d_fsdata, d->d_name.name); |
| 140 | CONFIGFS_DIR); | 166 | if (!error) |
| 167 | error = configfs_make_dirent(p->d_fsdata, d, k, mode, | ||
| 168 | CONFIGFS_DIR); | ||
| 141 | if (!error) { | 169 | if (!error) { |
| 142 | error = configfs_create(d, mode, init_dir); | 170 | error = configfs_create(d, mode, init_dir); |
| 143 | if (!error) { | 171 | if (!error) { |
