Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 264853
b: refs/heads/master
c: 58f2a4c
h: refs/heads/master
i:
  264851: a097538
v: v3
  • Loading branch information
Mikulas Patocka authored and Greg Kroah-Hartman committed Aug 23, 2011
1 parent f8c75e4 commit 9e4e5eb
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 13 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: 4f72c0cab40536a0be501d85ea4918467ab82ad5
refs/heads/master: 58f2a4c7932d8bec866d0394f806004146cde827
19 changes: 7 additions & 12 deletions trunk/fs/sysfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,6 @@ struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd)
*/
void sysfs_put_active(struct sysfs_dirent *sd)
{
struct completion *cmpl;
int v;

if (unlikely(!sd))
Expand All @@ -166,10 +165,9 @@ void sysfs_put_active(struct sysfs_dirent *sd)
return;

/* atomic_dec_return() is a mb(), we'll always see the updated
* sd->s_sibling.
* sd->u.completion.
*/
cmpl = (void *)sd->s_sibling;
complete(cmpl);
complete(sd->u.completion);
}

/**
Expand All @@ -183,16 +181,16 @@ static void sysfs_deactivate(struct sysfs_dirent *sd)
DECLARE_COMPLETION_ONSTACK(wait);
int v;

BUG_ON(sd->s_sibling || !(sd->s_flags & SYSFS_FLAG_REMOVED));
BUG_ON(!(sd->s_flags & SYSFS_FLAG_REMOVED));

if (!(sysfs_type(sd) & SYSFS_ACTIVE_REF))
return;

sd->s_sibling = (void *)&wait;
sd->u.completion = (void *)&wait;

rwsem_acquire(&sd->dep_map, 0, 0, _RET_IP_);
/* atomic_add_return() is a mb(), put_active() will always see
* the updated sd->s_sibling.
* the updated sd->u.completion.
*/
v = atomic_add_return(SD_DEACTIVATED_BIAS, &sd->s_active);

Expand All @@ -201,8 +199,6 @@ static void sysfs_deactivate(struct sysfs_dirent *sd)
wait_for_completion(&wait);
}

sd->s_sibling = NULL;

lock_acquired(&sd->dep_map, _RET_IP_);
rwsem_release(&sd->dep_map, 1, _RET_IP_);
}
Expand Down Expand Up @@ -518,7 +514,7 @@ void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
}

sd->s_flags |= SYSFS_FLAG_REMOVED;
sd->s_sibling = acxt->removed;
sd->u.removed_list = acxt->removed;
acxt->removed = sd;
}

Expand All @@ -542,8 +538,7 @@ void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt)
while (acxt->removed) {
struct sysfs_dirent *sd = acxt->removed;

acxt->removed = sd->s_sibling;
sd->s_sibling = NULL;
acxt->removed = sd->u.removed_list;

sysfs_deactivate(sd);
unmap_bin_file(sd);
Expand Down
5 changes: 5 additions & 0 deletions trunk/fs/sysfs/sysfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ struct sysfs_dirent {

struct rb_node name_node;

union {
struct completion *completion;
struct sysfs_dirent *removed_list;
} u;

const void *s_ns; /* namespace tag */
union {
struct sysfs_elem_dir s_dir;
Expand Down

0 comments on commit 9e4e5eb

Please sign in to comment.