From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Wed, 27 Jun 2001 15:38:11 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Wed, 27 Jun 2001 15:38:02 -0400 Received: from roc-24-169-102-121.rochester.rr.com ([24.169.102.121]:47886 "EHLO roc-24-169-102-121.rochester.rr.com") by vger.kernel.org with ESMTP id ; Wed, 27 Jun 2001 15:37:48 -0400 Date: Wed, 27 Jun 2001 15:36:49 -0400 From: Chris Mason To: Marcelo Tosatti cc: Xuan Baldauf , linux-kernel@vger.kernel.org, andrea@suse.de, "reiserfs-list@namesys.com" Subject: Re: VM deadlock Message-ID: <910160000.993670608@tiny> In-Reply-To: X-Mailer: Mulberry/2.0.8 (Linux/x86) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Wednesday, June 27, 2001 02:43:57 PM -0300 Marcelo Tosatti wrote: > > Looking at http://lists.omnipotent.net/reiserfs/200106/msg00214.html: Also from Xuan ;-) > >>> EIP; c0128228 <===== > Trace; c01303df > Trace; c01307e2 > Trace; c5141308 > Trace; c0176c4b > Trace; c5160848 > Trace; c01759e6 > Trace; c015e23a > Trace; c0141055 > Trace; c01416dd > Trace; c014170d > Trace; c0128d67 > Trace; c0128deb > Trace; c0105434 > > > > refill_freelist() calls page_launder(GFP_BUFFER). Now GFP_BUFFER _will_ > block writting out buffers with try_to_free_buffers(). Grrr, how did I miss this before? I thought Xuan's hang went away after pre3, so I didn't look into this trace hard enough. Reiserfs expects write_inode() calls initiated by kswapd to always have sync==0. Otherwise, kswapd ends up waiting on the log, which isn't what we want at all. The dirty inode callback ensures there are no dirty inodes that haven't been logged. I took the sync parameter to mean it is initiated by fsync or O_SYNC, so I trigger a full commit when sync == 1. So, my choices are to ignore sync == 1 write_inode calls when kswapd is doing it, or make a private inode dirty list. > > Maybe thats the reason for the deadlock we're seeing here at this specific > trace ? > The trace above is caused by the dirty inode problem, the I think the more recent trace is something different. -chris