Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753371AbdFMP60 (ORCPT ); Tue, 13 Jun 2017 11:58:26 -0400 Received: from huan2.mail.rambler.ru ([81.19.78.108]:18168 "EHLO huan2.mail.rambler.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751758AbdFMP6Z (ORCPT ); Tue, 13 Jun 2017 11:58:25 -0400 From: "Alex A. Mihaylov" To: Evgeniy Polyakov , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: "Alex A. Mihaylov" Subject: [PATCH] w1: Fix slave count on 1-Wire bus (resend) Date: Tue, 13 Jun 2017 18:57:56 +0300 Message-Id: <20170613155756.11463-1-minimumlaw@rambler.ru> X-Mailer: git-send-email 2.8.4 (Apple Git-73) In-Reply-To: <20170613071800.GA27688@kroah.com> References: <20170613071800.GA27688@kroah.com> X-Rambler-User: minimumlaw@rambler.ru/178.66.231.197 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1438 Lines: 45 1-Wire bus have very fast algorith for exchange with single slave device. Fix incorrect count of slave devices on connect second slave device. This case on slave device probe() step we need use generic (multislave) functions for read/write device. Signed-off-by: Alex A. Mihaylov --- drivers/w1/w1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c index 90a3d93..5b8b976 100644 --- a/drivers/w1/w1.c +++ b/drivers/w1/w1.c @@ -731,6 +731,7 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) memcpy(&sl->reg_num, rn, sizeof(sl->reg_num)); atomic_set(&sl->refcnt, 1); atomic_inc(&sl->master->refcnt); + dev->slave_count++; /* slave modules need to be loaded in a context with unlocked mutex */ mutex_unlock(&dev->mutex); @@ -750,11 +751,11 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) sl->family = f; - err = __w1_attach_slave_device(sl); if (err < 0) { dev_err(&dev->dev, "%s: Attaching %s failed.\n", __func__, sl->name); + dev->slave_count--; w1_family_put(sl->family); atomic_dec(&sl->master->refcnt); kfree(sl); @@ -762,7 +763,6 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) } sl->ttl = dev->slave_ttl; - dev->slave_count++; memcpy(msg.id.id, rn, sizeof(msg.id)); msg.type = W1_SLAVE_ADD; -- 2.8.4 (Apple Git-73)