From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: Re: [PATCH 2/8] writeback: move dirty inodes from super_block to backing_dev_info Date: Fri, 4 Sep 2009 11:43:05 -0400 Message-ID: <20090904154305.GA10002@infradead.org> References: <1251880967-1136-1-git-send-email-jens.axboe@oracle.com> <1251880967-1136-3-git-send-email-jens.axboe@oracle.com> <20090904025609.GC3658@infradead.org> <20090904065357.GP18599@kernel.dk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Christoph Hellwig , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, chris.mason@oracle.com, david@fromorbit.com, tytso@mit.edu, akpm@linux-foundation.org, jack@suse.cz To: Jens Axboe Return-path: Content-Disposition: inline In-Reply-To: <20090904065357.GP18599@kernel.dk> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Fri, Sep 04, 2009 at 08:53:57AM +0200, Jens Axboe wrote: > > + if (wbc->sync_mode == WB_SYNC_ALL) > > + bdi_wait_on_work_clear(&work); > > } > > That doesn't work, you have to wait for on-stack work. So either we just > punt and not do anything for WB_SYNC_NONE if the allocation fails, or we > punt to stack and do the wait. Since it's a cleaning action and > allocation fails, falling back to the stack and waiting seems like the > most appropriate choice. True, the wait needs to be unconditional. Updated version below. But now that I look at it, I wonder if we should even bother with it. bdi_start_writeback is only used in WC_SYNC_NONE mode in balance_dirty_pages. So if we really run so much out of memory that we can't allocate the bdi_work we might just throttle and wait for the flusher thread to do it's work. That would get rid of all the special cases for the on-stack bdi_work instances.