Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp332994pxy; Wed, 5 May 2021 03:28:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwaSG3R9AMiWMwJICXuoYLa6T83OP9iUyW1TjHBNYjsJK/8Cbm5fuSAJXwV1UsL0grw0QLz X-Received: by 2002:a17:906:52d7:: with SMTP id w23mr27517773ejn.451.1620210486131; Wed, 05 May 2021 03:28:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620210486; cv=none; d=google.com; s=arc-20160816; b=k84NoVW3XqWtA/cyqpbsJbHER08G5Odvjnc82cCVdi/4PUJEJk8tfIGAbBpgt5IqF+ 4lxjec952BLV5cpX6reiwKhb+OE0WWxv3+zSk8xC5jMdu3f7/AK+ANqtEvi6Cp1BgQni TqrNetMClNu5QzxAwJUybhU6ntEtln/nRx3YcTepBCf3D7R6GNgXqzOsoyAbpWqSgbXj IHw6iL/mXO5TLJqfGxgRtTp07Ys1cjdkkzdAtXSA7ET5oeSDYwjLD3DA6KkjM3/aMAMk qLXjoyV2k/cxnftuo6eHb7oNa+eqDM0EqK0kjFt3e1nNk/MVxxBG/W3IrcWYDZ+j3rmG uzXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ZoaOEQIh9mQd6nKqOJ+nigpGQLcn5XLu/NYojcu9ccY=; b=V5dmLdzO0m0BKFgh8jUZ80zNdM9wPHqxEkhWr5OWkzIuglFyJ4l2w746hXLWcAVb63 id+67cOxeMoYr6BMzRNH81CAERIp3HfwUi6gi3IvWUWd12DF4uPTAk6R0iszscw2Q2mQ CL2SkQxvxUuL039B04p7+YMJ/FlcSWG+fjkxm699DRhufSpD+7cVEk7VOoE3Di6SfC7b 5a21prycYTFMIxPnZppJnVnVynfDezCA5Iv642EOVnPy+UJxmpdCNVU2J0dkJaos40gC AbMu4pfvsn0xY1zxB2GBo/AHf/BtXJyJa4PxgUnpzBq7l67PxKDm1xJSC5GBng4RyqzU ALKw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n18si4801045ejj.404.2021.05.05.03.27.40; Wed, 05 May 2021 03:28:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231633AbhEEJVa (ORCPT + 99 others); Wed, 5 May 2021 05:21:30 -0400 Received: from mx2.suse.de ([195.135.220.15]:41352 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232400AbhEEJUc (ORCPT ); Wed, 5 May 2021 05:20:32 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 51020B274; Wed, 5 May 2021 09:19:35 +0000 (UTC) From: Jiri Slaby To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Jiri Slaby Subject: [PATCH 17/35] tty: drop tty_ldisc_ops::refcount Date: Wed, 5 May 2021 11:19:10 +0200 Message-Id: <20210505091928.22010-18-jslaby@suse.cz> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210505091928.22010-1-jslaby@suse.cz> References: <20210505091928.22010-1-jslaby@suse.cz> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The refcount is checked only in tty_unregister_ldisc and EBUSY returned if it is nonzero. But none of the tty_unregister_ldisc callers act anyhow if this (or any other) error is returned. So remove tty_ldisc_ops::refcount completely and make tty_unregister_ldisc return 'void' in the next patches. That means we assume tty_unregister_ldisc is not called while the ldisc might be in use. That relies on try_module_get in get_ldops and module_put in put_ldops. Signed-off-by: Jiri Slaby --- drivers/tty/n_tty.c | 2 +- drivers/tty/tty_ldisc.c | 14 +++----------- include/linux/tty_ldisc.h | 2 -- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c index 2fe27905c398..0ec93f1a61f5 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c @@ -2450,7 +2450,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) { *ops = n_tty_ops; ops->owner = NULL; - ops->refcount = ops->flags = 0; + ops->flags = 0; } EXPORT_SYMBOL_GPL(n_tty_inherit_ops); diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c index d02deeb5e584..98e8316fd28a 100644 --- a/drivers/tty/tty_ldisc.c +++ b/drivers/tty/tty_ldisc.c @@ -69,7 +69,6 @@ int tty_register_ldisc(struct tty_ldisc_ops *new_ldisc) raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); tty_ldiscs[new_ldisc->num] = new_ldisc; - new_ldisc->refcount = 0; raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); return ret; @@ -90,16 +89,12 @@ EXPORT_SYMBOL(tty_register_ldisc); int tty_unregister_ldisc(struct tty_ldisc_ops *ldisc) { unsigned long flags; - int ret = 0; raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); - if (tty_ldiscs[ldisc->num]->refcount) - ret = -EBUSY; - else - tty_ldiscs[ldisc->num] = NULL; + tty_ldiscs[ldisc->num] = NULL; raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); - return ret; + return 0; } EXPORT_SYMBOL(tty_unregister_ldisc); @@ -113,10 +108,8 @@ static struct tty_ldisc_ops *get_ldops(int disc) ldops = tty_ldiscs[disc]; if (ldops) { ret = ERR_PTR(-EAGAIN); - if (try_module_get(ldops->owner)) { - ldops->refcount++; + if (try_module_get(ldops->owner)) ret = ldops; - } } raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); return ret; @@ -127,7 +120,6 @@ static void put_ldops(struct tty_ldisc_ops *ldops) unsigned long flags; raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); - ldops->refcount--; module_put(ldops->owner); raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); } diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h index c20ca6a75b4c..fbe9de278629 100644 --- a/include/linux/tty_ldisc.h +++ b/include/linux/tty_ldisc.h @@ -208,8 +208,6 @@ struct tty_ldisc_ops { const char *fp, int count); struct module *owner; - - int refcount; }; struct tty_ldisc { -- 2.31.1