Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp9086511pxu; Mon, 28 Dec 2020 06:18:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJwOXYU6Ipe5fcFC6H50XE+e0Twj641bpfh7MforQesS3g9faE0WuVGx11wtxCUrIZ4iu/cu X-Received: by 2002:a05:6402:379:: with SMTP id s25mr43843180edw.367.1609165095848; Mon, 28 Dec 2020 06:18:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1609165095; cv=none; d=google.com; s=arc-20160816; b=TGjBG2MC3XevZ0HcKQwoSHt6Ddl8K3AW6kO9tQiDJbmF3NZg+uVF1vUcSrqa8m//C9 mr3NqIO2uyuH2aegnIQLFB0W/vwyy4kcPuFwSjHkQo6yoGTx4BsqLPinxMbBSr94iGmg uDCuGjz0Ud57PF931QexLWo/HoDl0Pl8hCbfPCvQXrQjjDKOr5sE30nIaIVpGGLSPgie qd5EdSYevtHr++s0ijkS1cHY97UWRgNs+Dv604sUiyOu5AW8j8UP/pY8EqhBZJWY+NT+ GLtSNmYOUe15rGiLdGXVv8Kk7c8IiXmhb7PD0ihvChDY6QN6tlO500xR+tU0frR6sO6o dakg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=F8uyCC0Fc6o2NTdXP+6YyqxX2H9Qh0eFvIQpZEBR44E=; b=do6PLqUELnb74pk9uRWS6F/E0rvX3a8ag8zLNDgRQALNZ3Yl6jQsLTx9h+UO2xBKpa wuJdYchly+uKZaZeR8YoUSm5GO9XLEVJ9IXMpBRt4jzcU+FCb9aENlaQ+4zOhQBsewl/ wlEX8Dnf7Qw9+xpFBWXTlHDGSi8NVEjXG6UwkILm0QjCj+nadZeqhQlA91jJZGALaG6t mH/ZNzbpVJtDua6Gd9fooq9zpmww536u7BpjhuMtXkRThFgRTzYYWuYzKx2zlCasy8Pz pnGjzFr2imbENPVGoGa48yOt58S5CIa5l2r8w0Z5vXFuq/ZkkPArxCvSlvLxUZWn6hS5 D6LA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=GH5OG37d; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sa14si15569030ejb.54.2020.12.28.06.17.52; Mon, 28 Dec 2020 06:18:15 -0800 (PST) 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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=GH5OG37d; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2440775AbgL1OP4 (ORCPT + 99 others); Mon, 28 Dec 2020 09:15:56 -0500 Received: from mail.kernel.org ([198.145.29.99]:50956 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2440754AbgL1OPv (ORCPT ); Mon, 28 Dec 2020 09:15:51 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0322E22AAA; Mon, 28 Dec 2020 14:15:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1609164910; bh=r1tlACLZjAyGOdjwoCkZPsPlsYbDLmUk9QEd2yrZF20=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GH5OG37dYPEpUSp4BvwvoVmDdoCZlXtURjjwgYCA1Ne6kjj9pr49sRAeI2MC1+ns1 QedFVlFxP/HXXfeBhRb0GRGy4ovcG7cqzzidKGGOSj0vxyLHQFq0bcafCz6/avOHM7 Vw6fIGr2BxXiaqFWZxvG75VSduYmZRq3dskqKdt0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Md Haris Iqbal , Jack Wang , Lutz Pogrell , Jens Axboe , Sasha Levin Subject: [PATCH 5.10 341/717] block/rnbd-clt: Dynamically alloc buffer for pathname & blk_symlink_name Date: Mon, 28 Dec 2020 13:45:39 +0100 Message-Id: <20201228125037.361525019@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201228125020.963311703@linuxfoundation.org> References: <20201228125020.963311703@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Md Haris Iqbal [ Upstream commit 64e8a6ece1a5b1fa21316918053d068baeac84af ] For every rnbd_clt_dev, we alloc the pathname and blk_symlink_name statically to NAME_MAX which is 255 bytes. In most of the cases we only need less than 10 bytes, so 500 bytes per block device are wasted. This commit dynamically allocates memory buffer for pathname and blk_symlink_name. Signed-off-by: Md Haris Iqbal Signed-off-by: Jack Wang Reviewed-by: Lutz Pogrell Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/block/rnbd/rnbd-clt-sysfs.c | 12 ++++++++++-- drivers/block/rnbd/rnbd-clt.c | 14 +++++++++++--- drivers/block/rnbd/rnbd-clt.h | 4 ++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/drivers/block/rnbd/rnbd-clt-sysfs.c b/drivers/block/rnbd/rnbd-clt-sysfs.c index 4f4474eecadb7..b53df40c9a97f 100644 --- a/drivers/block/rnbd/rnbd-clt-sysfs.c +++ b/drivers/block/rnbd/rnbd-clt-sysfs.c @@ -435,6 +435,7 @@ void rnbd_clt_remove_dev_symlink(struct rnbd_clt_dev *dev) */ if (strlen(dev->blk_symlink_name) && try_module_get(THIS_MODULE)) { sysfs_remove_link(rnbd_devs_kobj, dev->blk_symlink_name); + kfree(dev->blk_symlink_name); module_put(THIS_MODULE); } } @@ -487,10 +488,17 @@ static int rnbd_clt_get_path_name(struct rnbd_clt_dev *dev, char *buf, static int rnbd_clt_add_dev_symlink(struct rnbd_clt_dev *dev) { struct kobject *gd_kobj = &disk_to_dev(dev->gd)->kobj; - int ret; + int ret, len; + + len = strlen(dev->pathname) + strlen(dev->sess->sessname) + 2; + dev->blk_symlink_name = kzalloc(len, GFP_KERNEL); + if (!dev->blk_symlink_name) { + rnbd_clt_err(dev, "Failed to allocate memory for blk_symlink_name\n"); + goto out_err; + } ret = rnbd_clt_get_path_name(dev, dev->blk_symlink_name, - sizeof(dev->blk_symlink_name)); + len); if (ret) { rnbd_clt_err(dev, "Failed to get /sys/block symlink path, err: %d\n", ret); diff --git a/drivers/block/rnbd/rnbd-clt.c b/drivers/block/rnbd/rnbd-clt.c index 8b2411ccbda97..f180ebf1e11c9 100644 --- a/drivers/block/rnbd/rnbd-clt.c +++ b/drivers/block/rnbd/rnbd-clt.c @@ -59,6 +59,7 @@ static void rnbd_clt_put_dev(struct rnbd_clt_dev *dev) ida_simple_remove(&index_ida, dev->clt_device_id); mutex_unlock(&ida_lock); kfree(dev->hw_queues); + kfree(dev->pathname); rnbd_clt_put_sess(dev->sess); mutex_destroy(&dev->lock); kfree(dev); @@ -1381,10 +1382,17 @@ static struct rnbd_clt_dev *init_dev(struct rnbd_clt_session *sess, pathname, sess->sessname, ret); goto out_queues; } + + dev->pathname = kzalloc(strlen(pathname) + 1, GFP_KERNEL); + if (!dev->pathname) { + ret = -ENOMEM; + goto out_queues; + } + strlcpy(dev->pathname, pathname, strlen(pathname) + 1); + dev->clt_device_id = ret; dev->sess = sess; dev->access_mode = access_mode; - strlcpy(dev->pathname, pathname, sizeof(dev->pathname)); mutex_init(&dev->lock); refcount_set(&dev->refcount, 1); dev->dev_state = DEV_STATE_INIT; @@ -1413,8 +1421,8 @@ static bool __exists_dev(const char *pathname) list_for_each_entry(sess, &sess_list, list) { mutex_lock(&sess->lock); list_for_each_entry(dev, &sess->devs_list, list) { - if (!strncmp(dev->pathname, pathname, - sizeof(dev->pathname))) { + if (strlen(dev->pathname) == strlen(pathname) && + !strcmp(dev->pathname, pathname)) { found = true; break; } diff --git a/drivers/block/rnbd/rnbd-clt.h b/drivers/block/rnbd/rnbd-clt.h index ed33654aa4868..b193d59040503 100644 --- a/drivers/block/rnbd/rnbd-clt.h +++ b/drivers/block/rnbd/rnbd-clt.h @@ -108,7 +108,7 @@ struct rnbd_clt_dev { u32 clt_device_id; struct mutex lock; enum rnbd_clt_dev_state dev_state; - char pathname[NAME_MAX]; + char *pathname; enum rnbd_access_mode access_mode; bool read_only; bool rotational; @@ -126,7 +126,7 @@ struct rnbd_clt_dev { struct list_head list; struct gendisk *gd; struct kobject kobj; - char blk_symlink_name[NAME_MAX]; + char *blk_symlink_name; refcount_t refcount; struct work_struct unmap_on_rmmod_work; }; -- 2.27.0