diff options
Diffstat (limited to 'fs/dcache.c')
| -rw-r--r-- | fs/dcache.c | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index a15a2e1f5520..7376b61269fb 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
| @@ -337,12 +337,10 @@ struct dentry * d_find_alias(struct inode *inode) | |||
| 337 | */ | 337 | */ |
| 338 | void d_prune_aliases(struct inode *inode) | 338 | void d_prune_aliases(struct inode *inode) |
| 339 | { | 339 | { |
| 340 | struct list_head *tmp, *head = &inode->i_dentry; | 340 | struct dentry *dentry; |
| 341 | restart: | 341 | restart: |
| 342 | spin_lock(&dcache_lock); | 342 | spin_lock(&dcache_lock); |
| 343 | tmp = head; | 343 | list_for_each_entry(dentry, &inode->i_dentry, d_alias) { |
| 344 | while ((tmp = tmp->next) != head) { | ||
| 345 | struct dentry *dentry = list_entry(tmp, struct dentry, d_alias); | ||
| 346 | spin_lock(&dentry->d_lock); | 344 | spin_lock(&dentry->d_lock); |
| 347 | if (!atomic_read(&dentry->d_count)) { | 345 | if (!atomic_read(&dentry->d_count)) { |
| 348 | __dget_locked(dentry); | 346 | __dget_locked(dentry); |
| @@ -463,10 +461,7 @@ void shrink_dcache_sb(struct super_block * sb) | |||
| 463 | * superblock to the most recent end of the unused list. | 461 | * superblock to the most recent end of the unused list. |
| 464 | */ | 462 | */ |
| 465 | spin_lock(&dcache_lock); | 463 | spin_lock(&dcache_lock); |
| 466 | next = dentry_unused.next; | 464 | list_for_each_safe(tmp, next, &dentry_unused) { |
| 467 | while (next != &dentry_unused) { | ||
| 468 | tmp = next; | ||
| 469 | next = tmp->next; | ||
| 470 | dentry = list_entry(tmp, struct dentry, d_lru); | 465 | dentry = list_entry(tmp, struct dentry, d_lru); |
| 471 | if (dentry->d_sb != sb) | 466 | if (dentry->d_sb != sb) |
| 472 | continue; | 467 | continue; |
| @@ -478,10 +473,7 @@ void shrink_dcache_sb(struct super_block * sb) | |||
| 478 | * Pass two ... free the dentries for this superblock. | 473 | * Pass two ... free the dentries for this superblock. |
| 479 | */ | 474 | */ |
| 480 | repeat: | 475 | repeat: |
| 481 | next = dentry_unused.next; | 476 | list_for_each_safe(tmp, next, &dentry_unused) { |
| 482 | while (next != &dentry_unused) { | ||
| 483 | tmp = next; | ||
| 484 | next = tmp->next; | ||
| 485 | dentry = list_entry(tmp, struct dentry, d_lru); | 477 | dentry = list_entry(tmp, struct dentry, d_lru); |
| 486 | if (dentry->d_sb != sb) | 478 | if (dentry->d_sb != sb) |
| 487 | continue; | 479 | continue; |
