Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5644637imu; Mon, 26 Nov 2018 03:27:14 -0800 (PST) X-Google-Smtp-Source: AFSGD/WEUy0AttMtUEUfCMkrhlMJ9r/NrQQ99mbIz3BOZoa/2qQB25edaxn+e0ZDlumr/NYsPX7Z X-Received: by 2002:a17:902:b18b:: with SMTP id s11mr11447155plr.56.1543231634245; Mon, 26 Nov 2018 03:27:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543231634; cv=none; d=google.com; s=arc-20160816; b=fBioLr5pCbmIi+kA+Vt2rWz59HZcbMfBwjMNN6pLM2m4FRnKLnr4DcCHIjR68AsHAv 6aZKAhN+Kd9n4r1+vzufGbcPk1A8AVVg1WI7qMOgnHbuydWT6UVIuztQ9MafWw1e7OKC AAHPUmTi2+aeEW1rr83I42vIMW5M2NEhFWFtC/ehS1EiMl06RSlqXWV19t5k65SFh5JT o7cvEfm8p1mJMHs5lco/bMFrdocomnWbyzzVwH2ws7dAvx4Qm6SzqRbgeNj3DUJeEGQ+ Yw6aK3W8Cq7+uX1LIrTsaZt+9MXVlT5GA4jsrP95M52o11A86WuRF3HE9Vi1JWx7p19U wnhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fN90vrYFK9TfmxtgX08hs9Cdu0SdjNBPsLomJX3Kbt8=; b=Wjj3JAPZtwi07Xq+pWrfegHQ/MtqppIZvx74fMia061098haEwQCal0G0JraiEprBA 1ksah/h3w8lajvcREIMJKUCJvjLVNllKmuwS9vHmbxhhBJlimEdMSIVNkrf+Z0r6Yi6H KNEf/QkJ1rxkO0OwPDl7NPS5z8SFpoYXT1EWRSCOTAY1ssnssBVYjSa0DVdHShAj3x71 4fzx6wpS2dJxrmp4NkNLd9FrL3gQmxTmaOZP7rF67grF9Znpi4mdpuZAczloeAsyFnfi Yg8Rf0HrqxAgVtIAQMCLf20qSGkBOTcxDjqohgeKC3HpN0swgLBPIFgWe3vjW24E1an7 hhAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kZ6jOrZH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d8si9905pln.128.2018.11.26.03.26.49; Mon, 26 Nov 2018 03:27:14 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kZ6jOrZH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728051AbeKZVtW (ORCPT + 99 others); Mon, 26 Nov 2018 16:49:22 -0500 Received: from mail.kernel.org ([198.145.29.99]:58242 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726561AbeKZVtV (ORCPT ); Mon, 26 Nov 2018 16:49:21 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C83762089F; Mon, 26 Nov 2018 10:55:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543229737; bh=zgeS0SUH2SftbuEyHFFYkjENRrxQD1n47k+7LXdNr88=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kZ6jOrZHUbJMGm2s219gx3/ZlLK8Jy9ZdXRu+BKcGm5EBLt7bM/Ckl+ZVZCLoKhok 4IFw2bhBS9LSk92NxIsOAtQ73Fie/4iY8y1BtWv3sr/XHztsYUnt7HWhPppKdBOARr sKiSMApW7WwgK4Uspmix/w7MfZ6Le312WEbskKA8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sergey Senozhatsky , Hannes Reinecke , Howard Chen , Minchan Kim , Sasha Levin Subject: [PATCH 4.4 54/70] zram: close udev startup race condition as default groups Date: Mon, 26 Nov 2018 11:51:09 +0100 Message-Id: <20181126105052.059702157@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181126105046.722096341@linuxfoundation.org> References: <20181126105046.722096341@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ commit fef912bf860e upstream. commit 98af4d4df889 upstream. I got a report from Howard Chen that he saw zram and sysfs race(ie, zram block device file is created but sysfs for it isn't yet) when he tried to create new zram devices via hotadd knob. v4.20 kernel fixes it by [1, 2] but it's too large size to merge into -stable so this patch fixes the problem by registering defualt group by Greg KH's approach[3]. This patch should be applied to every stable tree [3.16+] currently existing from kernel.org because the problem was introduced at 2.6.37 by [4]. [1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk [2] 98af4d4df889, zram: register default groups with device_add_disk() [3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/ [4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface Cc: Sergey Senozhatsky Cc: Hannes Reinecke Tested-by: Howard Chen Signed-off-by: Minchan Kim Signed-off-by: Sasha Levin --- drivers/block/zram/zram_drv.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 502406c9e6e1..616ee4f9c233 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1184,6 +1184,11 @@ static struct attribute_group zram_disk_attr_group = { .attrs = zram_disk_attrs, }; +static const struct attribute_group *zram_disk_attr_groups[] = { + &zram_disk_attr_group, + NULL, +}; + /* * Allocate and initialize new zram device. the function returns * '>= 0' device_id upon success, and negative value otherwise. @@ -1264,15 +1269,9 @@ static int zram_add(void) zram->disk->queue->limits.discard_zeroes_data = 0; queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zram->disk->queue); + disk_to_dev(zram->disk)->groups = zram_disk_attr_groups; add_disk(zram->disk); - ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj, - &zram_disk_attr_group); - if (ret < 0) { - pr_err("Error creating sysfs group for device %d\n", - device_id); - goto out_free_disk; - } strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor)); zram->meta = NULL; zram->max_comp_streams = 1; @@ -1280,9 +1279,6 @@ static int zram_add(void) pr_info("Added device: %s\n", zram->disk->disk_name); return device_id; -out_free_disk: - del_gendisk(zram->disk); - put_disk(zram->disk); out_free_queue: blk_cleanup_queue(queue); out_free_idr: @@ -1310,16 +1306,6 @@ static int zram_remove(struct zram *zram) zram->claim = true; mutex_unlock(&bdev->bd_mutex); - /* - * Remove sysfs first, so no one will perform a disksize - * store while we destroy the devices. This also helps during - * hot_remove -- zram_reset_device() is the last holder of - * ->init_lock, no later/concurrent disksize_store() or any - * other sysfs handlers are possible. - */ - sysfs_remove_group(&disk_to_dev(zram->disk)->kobj, - &zram_disk_attr_group); - /* Make sure all the pending I/O are finished */ fsync_bdev(bdev); zram_reset_device(zram); -- 2.17.1