From patchwork Wed Jun 2 13:09:05 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Bader X-Patchwork-Id: 54369 X-Patchwork-Delegate: stefan.bader@canonical.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from chlorine.canonical.com (chlorine.canonical.com [91.189.94.204]) by ozlabs.org (Postfix) with ESMTP id 45751B7D12 for ; Wed, 2 Jun 2010 23:09:15 +1000 (EST) Received: from localhost ([127.0.0.1] helo=chlorine.canonical.com) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1OJnh0-0001zg-0Z; Wed, 02 Jun 2010 14:09:10 +0100 Received: from adelie.canonical.com ([91.189.90.139]) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1OJngy-0001yD-0e for kernel-team@lists.ubuntu.com; Wed, 02 Jun 2010 14:09:08 +0100 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1OJngx-0006YH-UO for ; Wed, 02 Jun 2010 14:09:07 +0100 Received: from p5b2e4615.dip.t-dialin.net ([91.46.70.21] helo=canonical.com) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1OJngx-0002Ar-MU for kernel-team@lists.ubuntu.com; Wed, 02 Jun 2010 14:09:07 +0100 From: Stefan Bader To: kernel-team@lists.ubuntu.com Subject: fix for slow unmount on ext4 - bug 543617 on lp Date: Wed, 2 Jun 2010 15:09:05 +0200 Message-Id: <1275484147-26044-1-git-send-email-stefan.bader@canonical.com> X-Mailer: git-send-email 1.7.0.4 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.9 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: kernel-team-bounces@lists.ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com This is a followup on a previous post which basically consists of the revert of 5e1941884c700b7b97bcad52c2d8212ac56a7ebc "UBUNTU: SAUCE: sync before umount to reduce time taken by ext4 umount" and then applying a patch from bugzilla "writeback: fix __sync_filesystem(sb, 0) on umount" However the second patch never went upstream, while the following two (backported to 2.6.32.y) made it. Sadly, when asking Jens Axboe about forwarding those to stable, I got the following response: Jens Axboe wrote: > > I would send the backports to stable but wanted to check with you > > beforehand. Would you be ok with a stable submission of these two? > I would have said yes a few days ago, but Christoph claims that the > patches make xfs test hang. Unfortunately I'm a bit between jobs and > don't have proper testing equipment right now, so I had no other option > than revert exactly those two commits... Now the question is whether we want to go ahead (because we need to do the revert as that causes other problems) with the upstream version that might cause xfs problems (assuming xfs is not our main fs) or take the patch from bugzilla which might have the same problem or others yet unknown. -Stefan ---- From: Dmitry Monakhov BugLink: http://launchpad.net/bugs/543617 __sync_filesystem(sb, 0) is no longer works on umount because sb can not be pined, Because s_mount sem is downed for write and s_root is NULL. In fact umount is a special case similar to WB_SYNC_ALL, where sb is pinned already. BADCOMMIT: 03ba3782e8dcc5b0e1efe440d33084f066e38cae Signed-off-by: Dmitry Monakhov (cherry-picked from https://bugzilla.kernel.org/attachment.cgi?id=26224) Signed-off-by: Surbhi Palande --- fs/fs-writeback.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 4102f20..937a8ae 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -583,9 +583,9 @@ static int pin_sb_for_writeback(struct writeback_control *wbc, unpin_sb_for_writeback(psb); /* - * Caller must already hold the ref for this + * Caller must already hold the ref for integrity sync, and on umount */ - if (wbc->sync_mode == WB_SYNC_ALL) { + if (wbc->sync_mode == WB_SYNC_ALL || !sb->s_root) { WARN_ON(!rwsem_is_locked(&sb->s_umount)); return 0; } @@ -597,6 +597,7 @@ static int pin_sb_for_writeback(struct writeback_control *wbc, spin_unlock(&sb_lock); goto pinned; } + WARN_ON(1); /* * umounted, drop rwsem again and fall through to failure */