From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755104AbbA1Dx5 (ORCPT ); Tue, 27 Jan 2015 22:53:57 -0500 Received: from mail-pa0-f47.google.com ([209.85.220.47]:46001 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752222AbbA1Dx4 (ORCPT ); Tue, 27 Jan 2015 22:53:56 -0500 Date: Wed, 28 Jan 2015 12:53:54 +0900 From: Sergey Senozhatsky To: Minchan Kim Cc: Sergey Senozhatsky , Sergey Senozhatsky , Jerome Marchand , Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Nitin Gupta Subject: Re: [PATCH 1/2] zram: free meta out of init_lock Message-ID: <20150128035354.GA7790@swordfish> References: <20150126013309.GA26895@blaptop> <20150126141709.GA985@swordfish> <20150126160007.GC528@blaptop> <20150127021704.GA665@swordfish> <20150127031823.GA16797@blaptop> <20150127040305.GB665@swordfish> <20150128001526.GA25828@blaptop> <20150128002203.GB25828@blaptop> <20150128020759.GA343@swordfish> <20150128025707.GB32712@blaptop> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150128025707.GB32712@blaptop> 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 On (01/28/15 11:57), Minchan Kim wrote: [..] > > second, > > after kick_all_cpus_sync() new RW operations will see false init_done(). > > bdev->bd_holders protects from resetting device which has read/write > > operation ongoing on the onther CPU. > > > > I need to refresh on how ->bd_holders actually incremented/decremented. > > can the following race condition take a place? > > > > CPU0 CPU1 > > reset_store() > > bdev->bd_holders == false > > zram_make_request > > -rm- down_read(&zram->init_lock); > > init_done(zram) == true > > zram_reset_device() valid_io_request() > > __zram_make_request > > down_write(&zram->init_lock); zram_bvec_rw > > [..] > > set_capacity(zram->disk, 0); > > zram->init_done = false; > > kick_all_cpus_sync(); zram_bvec_write or zram_bvec_read() > > zram_meta_free(zram->meta); > > zcomp_destroy(zram->comp); zcomp_compress() or zcomp_decompress() > > You're absolutely right. I forgot rw path is blockable so > kick_all_cpus_sync doesn't work for our case, unfortunately. > So, I want to go with srcu. Do you agree? or another suggestion? yes, I think we need to take a second look on srcu approach. -ss