From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: Re: [PATCH] jbd2: avoid the concurrent data writeback Date: Mon, 15 Nov 2010 06:27:32 -0500 Message-ID: <20101115112732.GA15953@infradead.org> References: <1289827533-2576-1-git-send-email-feng.tang@intel.com> <20101115055420.GA21785@localhost> <20101115175943.490d3469@feng-i7> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: "Wu, Fengguang" , "linux-ext4@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , LKML To: Feng Tang Return-path: Received: from bombadil.infradead.org ([18.85.46.34]:39151 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755621Ab0KOL1e (ORCPT ); Mon, 15 Nov 2010 06:27:34 -0500 Content-Disposition: inline In-Reply-To: <20101115175943.490d3469@feng-i7> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Mon, Nov 15, 2010 at 05:59:43PM +0800, Feng Tang wrote: > + * > + * Sometimes when this get called, the host inode may be under data > + * syncing initiated by flush thread(especially for a large file), and > + * in such situation, we should skip this path of writeback > */ > static int journal_submit_inode_data_buffers(struct address_space *mapping) > { > @@ -181,6 +185,13 @@ static int journal_submit_inode_data_buffers(struct address_space *mapping) > .range_end = i_size_read(mapping->host), > }; > > + spin_lock(&inode_lock); > + if (mapping->host->i_state & I_SYNC) { > + spin_unlock(&inode_lock); > + return 0; > + } > + spin_unlock(&inode_lock); > + inode_lock is not exported to modules, and that's for a pretty good reason. I think you want to change this code at a higher level to not compete with the flusher threads at all.