diff options
author | Evgeniy Polyakov <johnpol@2ka.mipt.ru> | 2008-01-14 00:55:08 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-14 08:52:22 -0800 |
commit | a2a6c74d34c3ae9de6825767a30ab17f709b59ce (patch) | |
tree | 573b0117cbb90c87ee6fa0355870949b66159866 /drivers/w1/w1.c | |
parent | cb2a52052cebe4716e83b9d2e53682ba00f67de6 (diff) |
w1: decrement slave counter only in ->release() callback
Decrement the slave counter only in ->release() callback instead of both
in ->release() and w1 control.
Patch is based on debug work and preliminary patch made by Henri Laakso.
Henri noticed in debug that this counter becomes negative after w1 slave
device is physically removed.
Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Cc: Henri Laakso <henri.laakso@wapice.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/w1/w1.c')
-rw-r--r-- | drivers/w1/w1.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c index 070217322c9f..33e50310e9e0 100644 --- a/drivers/w1/w1.c +++ b/drivers/w1/w1.c @@ -869,11 +869,9 @@ void w1_search_process(struct w1_master *dev, u8 search_type) w1_search_devices(dev, search_type, w1_slave_found); list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { - if (!test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags) && !--sl->ttl) { + if (!test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags) && !--sl->ttl) w1_slave_detach(sl); - - dev->slave_count--; - } else if (test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags)) + else if (test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags)) sl->ttl = dev->slave_ttl; } |