From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Axboe Subject: Re: [PATCH 1/1] writeback fix bdi thread race in mark_inode_dirty Date: Mon, 22 Jul 2013 09:41:01 -0600 Message-ID: <20130722154101.GT32755@kernel.dk> References: <1374257140-26729-1-git-send-email-srinivas.eeda@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, jack@suse.cz To: Srinivas Eeda Return-path: Received: from merlin.infradead.org ([205.233.59.134]:46769 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932155Ab3GVPlG (ORCPT ); Mon, 22 Jul 2013 11:41:06 -0400 Content-Disposition: inline In-Reply-To: <1374257140-26729-1-git-send-email-srinivas.eeda@oracle.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Fri, Jul 19 2013, Srinivas Eeda wrote: > In __mark_inode_dirty, a process checks !wb_has_dirty_io outside of list_lock > spinlock. This could cause a race, where process sees that list has dirty io > and decides not wake up bdi thread and waits for spinlock to add to dirty list. > Right at this time bdi_writeback_workfn finished write-back on last inode. > It sees the list is empty and ends. Process could now get the spinlock and > add inode to dirty list and doesn't wakeup bdi thread. Future calls to > __mark_inode_dirty also do not wake up the thread because list is not empty > any more. > > Fix is to get wb.list_lock spinlock before checking the dirty list With Jan's ack, lets add this for the current cycle. Should go into stable as well, imho. -- Jens Axboe