diff options
author | Jens Axboe <jaxboe@fusionio.com> | 2011-03-01 15:04:39 -0500 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2011-03-01 15:04:39 -0500 |
commit | 6fae9c25134baffbeeb20031479e7ff6f6d8eec0 (patch) | |
tree | c9ab89992ce5293a43cd455a81dc8a5926a28a5e /fs/configfs/dir.c | |
parent | c186794dbb466b45cf40f942f2d09d6d5b4b0e42 (diff) | |
parent | f5412be599602124d2bdd49947b231dd77c0bf99 (diff) |
Merge commit 'v2.6.38-rc6' into for-2.6.39/core
Conflicts:
block/cfq-iosched.c
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'fs/configfs/dir.c')
-rw-r--r-- | fs/configfs/dir.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c index 0b502f80c691..90ff3cb10de3 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c | |||
@@ -67,12 +67,12 @@ static void configfs_d_iput(struct dentry * dentry, | |||
67 | * We _must_ delete our dentries on last dput, as the chain-to-parent | 67 | * We _must_ delete our dentries on last dput, as the chain-to-parent |
68 | * behavior is required to clear the parents of default_groups. | 68 | * behavior is required to clear the parents of default_groups. |
69 | */ | 69 | */ |
70 | static int configfs_d_delete(struct dentry *dentry) | 70 | static int configfs_d_delete(const struct dentry *dentry) |
71 | { | 71 | { |
72 | return 1; | 72 | return 1; |
73 | } | 73 | } |
74 | 74 | ||
75 | static const struct dentry_operations configfs_dentry_ops = { | 75 | const struct dentry_operations configfs_dentry_ops = { |
76 | .d_iput = configfs_d_iput, | 76 | .d_iput = configfs_d_iput, |
77 | /* simple_delete_dentry() isn't exported */ | 77 | /* simple_delete_dentry() isn't exported */ |
78 | .d_delete = configfs_d_delete, | 78 | .d_delete = configfs_d_delete, |
@@ -232,10 +232,8 @@ int configfs_make_dirent(struct configfs_dirent * parent_sd, | |||
232 | 232 | ||
233 | sd->s_mode = mode; | 233 | sd->s_mode = mode; |
234 | sd->s_dentry = dentry; | 234 | sd->s_dentry = dentry; |
235 | if (dentry) { | 235 | if (dentry) |
236 | dentry->d_fsdata = configfs_get(sd); | 236 | dentry->d_fsdata = configfs_get(sd); |
237 | dentry->d_op = &configfs_dentry_ops; | ||
238 | } | ||
239 | 237 | ||
240 | return 0; | 238 | return 0; |
241 | } | 239 | } |
@@ -278,7 +276,6 @@ static int create_dir(struct config_item * k, struct dentry * p, | |||
278 | error = configfs_create(d, mode, init_dir); | 276 | error = configfs_create(d, mode, init_dir); |
279 | if (!error) { | 277 | if (!error) { |
280 | inc_nlink(p->d_inode); | 278 | inc_nlink(p->d_inode); |
281 | (d)->d_op = &configfs_dentry_ops; | ||
282 | } else { | 279 | } else { |
283 | struct configfs_dirent *sd = d->d_fsdata; | 280 | struct configfs_dirent *sd = d->d_fsdata; |
284 | if (sd) { | 281 | if (sd) { |
@@ -371,9 +368,7 @@ int configfs_create_link(struct configfs_symlink *sl, | |||
371 | CONFIGFS_ITEM_LINK); | 368 | CONFIGFS_ITEM_LINK); |
372 | if (!err) { | 369 | if (!err) { |
373 | err = configfs_create(dentry, mode, init_symlink); | 370 | err = configfs_create(dentry, mode, init_symlink); |
374 | if (!err) | 371 | if (err) { |
375 | dentry->d_op = &configfs_dentry_ops; | ||
376 | else { | ||
377 | struct configfs_dirent *sd = dentry->d_fsdata; | 372 | struct configfs_dirent *sd = dentry->d_fsdata; |
378 | if (sd) { | 373 | if (sd) { |
379 | spin_lock(&configfs_dirent_lock); | 374 | spin_lock(&configfs_dirent_lock); |
@@ -399,8 +394,7 @@ static void remove_dir(struct dentry * d) | |||
399 | if (d->d_inode) | 394 | if (d->d_inode) |
400 | simple_rmdir(parent->d_inode,d); | 395 | simple_rmdir(parent->d_inode,d); |
401 | 396 | ||
402 | pr_debug(" o %s removing done (%d)\n",d->d_name.name, | 397 | pr_debug(" o %s removing done (%d)\n",d->d_name.name, d->d_count); |
403 | atomic_read(&d->d_count)); | ||
404 | 398 | ||
405 | dput(parent); | 399 | dput(parent); |
406 | } | 400 | } |
@@ -448,7 +442,6 @@ static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * den | |||
448 | return error; | 442 | return error; |
449 | } | 443 | } |
450 | 444 | ||
451 | dentry->d_op = &configfs_dentry_ops; | ||
452 | d_rehash(dentry); | 445 | d_rehash(dentry); |
453 | 446 | ||
454 | return 0; | 447 | return 0; |
@@ -493,7 +486,10 @@ static struct dentry * configfs_lookup(struct inode *dir, | |||
493 | * If it doesn't exist and it isn't a NOT_PINNED item, | 486 | * If it doesn't exist and it isn't a NOT_PINNED item, |
494 | * it must be negative. | 487 | * it must be negative. |
495 | */ | 488 | */ |
496 | return simple_lookup(dir, dentry, nd); | 489 | if (dentry->d_name.len > NAME_MAX) |
490 | return ERR_PTR(-ENAMETOOLONG); | ||
491 | d_add(dentry, NULL); | ||
492 | return NULL; | ||
497 | } | 493 | } |
498 | 494 | ||
499 | out: | 495 | out: |