Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 102338
b: refs/heads/master
c: 5301a77
h: refs/heads/master
v: v3
  • Loading branch information
Louis Rilling authored and Mark Fasheh committed Jul 14, 2008
1 parent c2d443d commit 93ca22c
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6f61076406251626be39651d114fac412b1e0c39
refs/heads/master: 5301a77da2da1e4c22573e0e8d394a653b8ad9f9
5 changes: 3 additions & 2 deletions trunk/fs/configfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@
DECLARE_RWSEM(configfs_rename_sem);
/*
* Protects mutations of configfs_dirent linkage together with proper i_mutex
* Also protects mutations of symlinks linkage to target configfs_dirent
* Mutators of configfs_dirent linkage must *both* have the proper inode locked
* and configfs_dirent_lock locked, in that order.
* This allows one to safely traverse configfs_dirent trees without having to
* lock inodes.
* This allows one to safely traverse configfs_dirent trees and symlinks without
* having to lock inodes.
*/
DEFINE_SPINLOCK(configfs_dirent_lock);

Expand Down
8 changes: 6 additions & 2 deletions trunk/fs/configfs/symlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,15 @@ static int create_link(struct config_item *parent_item,
sl = kmalloc(sizeof(struct configfs_symlink), GFP_KERNEL);
if (sl) {
sl->sl_target = config_item_get(item);
/* FIXME: needs a lock, I'd bet */
spin_lock(&configfs_dirent_lock);
list_add(&sl->sl_list, &target_sd->s_links);
spin_unlock(&configfs_dirent_lock);
ret = configfs_create_link(sl, parent_item->ci_dentry,
dentry);
if (ret) {
spin_lock(&configfs_dirent_lock);
list_del_init(&sl->sl_list);
spin_unlock(&configfs_dirent_lock);
config_item_put(item);
kfree(sl);
}
Expand Down Expand Up @@ -186,8 +189,9 @@ int configfs_unlink(struct inode *dir, struct dentry *dentry)
type->ct_item_ops->drop_link(parent_item,
sl->sl_target);

/* FIXME: Needs lock */
spin_lock(&configfs_dirent_lock);
list_del_init(&sl->sl_list);
spin_unlock(&configfs_dirent_lock);

/* Put reference from create_link() */
config_item_put(sl->sl_target);
Expand Down

0 comments on commit 93ca22c

Please sign in to comment.