Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756038AbbBCOv3 (ORCPT ); Tue, 3 Feb 2015 09:51:29 -0500 Received: from mail-pa0-f47.google.com ([209.85.220.47]:52201 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751824AbbBCOv2 (ORCPT ); Tue, 3 Feb 2015 09:51:28 -0500 Date: Tue, 3 Feb 2015 23:52:00 +0900 From: Sergey Senozhatsky To: Sergey Senozhatsky Cc: Ganesh Mahendran , sergey.senozhatsky.work@gmail.com, Minchan Kim , Andrew Morton , Jerome Marchand , linux-kernel Subject: Re: [PATCH] zram: fix umount-reset_store-mount race condition Message-ID: <20150203145200.GA1046@swordfish> References: <1422886120-16534-1-git-send-email-sergey.senozhatsky@gmail.com> <20150203141525.GA1050@swordfish> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150203141525.GA1050@swordfish> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1725 Lines: 59 On (02/03/15 23:15), Sergey Senozhatsky wrote: > > How about keep this here? Protected by zram->init_lock. > > set_capacity(zram->disk, 0); > > why? > yeah, I see why. good catch. hm, why do we perform destroy_device() before zram_reset_device() in zram_exit()? how about doing something like this (I don't want to return that bool param back): --- drivers/block/zram/zram_drv.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index a32069f..386f7ed 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -736,6 +736,7 @@ static void zram_reset_device(struct zram *zram) memset(&zram->stats, 0, sizeof(zram->stats)); zram->disksize = 0; + set_capacity(zram->disk, 0); up_write(&zram->init_lock); } @@ -828,7 +829,6 @@ static ssize_t reset_store(struct device *dev, /* Make sure all pending I/O is finished */ fsync_bdev(bdev); zram_reset_device(zram); - set_capacity(zram->disk, 0); mutex_unlock(&bdev->bd_mutex); revalidate_disk(zram->disk); @@ -1178,12 +1178,8 @@ static void __exit zram_exit(void) for (i = 0; i < num_devices; i++) { zram = &zram_devices[i]; - destroy_device(zram); - /* - * Shouldn't access zram->disk after destroy_device - * because destroy_device already released zram->disk. - */ zram_reset_device(zram); + destroy_device(zram); } unregister_blkdev(zram_major, "zram"); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/