From patchwork Tue Feb 17 19:24:19 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Monakhov X-Patchwork-Id: 23312 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 396CADDD1C for ; Wed, 18 Feb 2009 06:25:21 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751177AbZBQTZT (ORCPT ); Tue, 17 Feb 2009 14:25:19 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751443AbZBQTZT (ORCPT ); Tue, 17 Feb 2009 14:25:19 -0500 Received: from mailhub.sw.ru ([195.214.232.25]:23669 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751177AbZBQTZS (ORCPT ); Tue, 17 Feb 2009 14:25:18 -0500 Received: from localhost.localdomain ([10.30.3.106]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id n1HJPDl2007756; Tue, 17 Feb 2009 22:25:13 +0300 (MSK) From: Dmitri Monakhov To: linux-ext4@vger.kernel.org Cc: Dmitri Monakhov Subject: [PATCH] ext3/4: Clear pagep after write_begin() has failed Date: Tue, 17 Feb 2009 22:24:19 +0300 Message-Id: <1234898659-4686-1-git-send-email-dmonakhov@openvz.org> X-Mailer: git-send-email 1.5.4.3 In-Reply-To: <> References: <> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Seems there is no strict rule to for this case. In fact everybody just ignored this variable after write_begin() has failed. This was true until ext4_defrag_partial(). So let's follows simple rule similar to block_write_begin(). Signed-off-by: Dmitri Monakhov --- fs/ext3/inode.c | 2 ++ fs/ext4/inode.c | 1 + 2 files changed, 3 insertions(+), 0 deletions(-) diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 5fa453b..7aa60db 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c @@ -1170,6 +1170,7 @@ retry: if (IS_ERR(handle)) { unlock_page(page); page_cache_release(page); + *pagep = NULL; ret = PTR_ERR(handle); goto out; } @@ -1187,6 +1188,7 @@ write_begin_failed: ext3_journal_stop(handle); unlock_page(page); page_cache_release(page); + *pagep = NULL; /* * block_write_begin may have instantiated a few blocks * outside i_size. Trim these off again. Don't need diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 658c4a7..0581c48 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1388,6 +1388,7 @@ retry: unlock_page(page); ext4_journal_stop(handle); page_cache_release(page); + *pagep = NULL; /* * block_write_begin may have instantiated a few blocks * outside i_size. Trim these off again. Don't need