From: Michal Hocko <mhocko@kernel.org> To: LKML <linux-kernel@vger.kernel.org> Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Andrew Morton <akpm@linux-foundation.org>, Johannes Weiner <hannes@cmpxchg.org>, Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>, Dave Chinner <david@fromorbit.com>, "Theodore Ts'o" <tytso@mit.edu>, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, Jan Kara <jack@suse.cz> Subject: [RFC -v2 4/8] jbd, jbd2: Do not fail journal because of frozen_buffer allocation failure Date: Tue, 18 Aug 2015 12:38:23 +0200 [thread overview] Message-ID: <20150818103823.GC5033@dhcp22.suse.cz> (raw) In-Reply-To: <1438768284-30927-5-git-send-email-mhocko@kernel.org> From: Michal Hocko <mhocko@suse.com> Journal transaction might fail prematurely because the frozen_buffer is allocated by GFP_NOFS request: [ 72.440013] do_get_write_access: OOM for frozen_buffer [ 72.440014] EXT4-fs: ext4_reserve_inode_write:4729: aborting transaction: Out of memory in __ext4_journal_get_write_access [ 72.440015] EXT4-fs error (device sda1) in ext4_reserve_inode_write:4735: Out of memory (...snipped....) [ 72.495559] do_get_write_access: OOM for frozen_buffer [ 72.495560] EXT4-fs: ext4_reserve_inode_write:4729: aborting transaction: Out of memory in __ext4_journal_get_write_access [ 72.496839] do_get_write_access: OOM for frozen_buffer [ 72.496841] EXT4-fs: ext4_reserve_inode_write:4729: aborting transaction: Out of memory in __ext4_journal_get_write_access [ 72.505766] Aborting journal on device sda1-8. [ 72.505851] EXT4-fs (sda1): Remounting filesystem read-only This wasn't a problem until "mm: page_alloc: do not lock up GFP_NOFS allocations upon OOM" because small GPF_NOFS allocations never failed. This allocation seems essential for the journal and GFP_NOFS is too restrictive to the memory allocator so let's use __GFP_NOFAIL here to emulate the previous behavior. jbd code has the very same issue so let's do the same there as well. Signed-off-by: Michal Hocko <mhocko@suse.com> --- fs/jbd/transaction.c | 11 +---------- fs/jbd2/transaction.c | 23 ++++------------------- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index 1695ba8334a2..bf7474deda2f 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c @@ -673,16 +673,7 @@ do_get_write_access(handle_t *handle, struct journal_head *jh, jbd_unlock_bh_state(bh); frozen_buffer = jbd_alloc(jh2bh(jh)->b_size, - GFP_NOFS); - if (!frozen_buffer) { - printk(KERN_ERR - "%s: OOM for frozen_buffer\n", - __func__); - JBUFFER_TRACE(jh, "oom!"); - error = -ENOMEM; - jbd_lock_bh_state(bh); - goto done; - } + GFP_NOFS|__GFP_NOFAIL); goto repeat; } jh->b_frozen_data = frozen_buffer; diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index ff2f2e6ad311..4d63c5911afa 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c @@ -923,16 +923,7 @@ do_get_write_access(handle_t *handle, struct journal_head *jh, jbd_unlock_bh_state(bh); frozen_buffer = jbd2_alloc(jh2bh(jh)->b_size, - GFP_NOFS); - if (!frozen_buffer) { - printk(KERN_ERR - "%s: OOM for frozen_buffer\n", - __func__); - JBUFFER_TRACE(jh, "oom!"); - error = -ENOMEM; - jbd_lock_bh_state(bh); - goto done; - } + GFP_NOFS|__GFP_NOFAIL); goto repeat; } jh->b_frozen_data = frozen_buffer; @@ -1156,15 +1147,9 @@ int jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh) goto out; repeat: - if (!jh->b_committed_data) { - committed_data = jbd2_alloc(jh2bh(jh)->b_size, GFP_NOFS); - if (!committed_data) { - printk(KERN_ERR "%s: No memory for committed data\n", - __func__); - err = -ENOMEM; - goto out; - } - } + if (!jh->b_committed_data) + committed_data = jbd2_alloc(jh2bh(jh)->b_size, + GFP_NOFS|__GFP_NOFAIL); jbd_lock_bh_state(bh); if (!jh->b_committed_data) { -- 2.5.0 -- Michal Hocko SUSE Labs
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org> To: LKML <linux-kernel@vger.kernel.org> Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Andrew Morton <akpm@linux-foundation.org>, Johannes Weiner <hannes@cmpxchg.org>, Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>, Dave Chinner <david@fromorbit.com>, Theodore Ts'o <tytso@mit.edu>, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, Jan Kara <jack@suse.cz> Subject: [RFC -v2 4/8] jbd, jbd2: Do not fail journal because of frozen_buffer allocation failure Date: Tue, 18 Aug 2015 12:38:23 +0200 [thread overview] Message-ID: <20150818103823.GC5033@dhcp22.suse.cz> (raw) In-Reply-To: <1438768284-30927-5-git-send-email-mhocko@kernel.org> From: Michal Hocko <mhocko@suse.com> Journal transaction might fail prematurely because the frozen_buffer is allocated by GFP_NOFS request: [ 72.440013] do_get_write_access: OOM for frozen_buffer [ 72.440014] EXT4-fs: ext4_reserve_inode_write:4729: aborting transaction: Out of memory in __ext4_journal_get_write_access [ 72.440015] EXT4-fs error (device sda1) in ext4_reserve_inode_write:4735: Out of memory (...snipped....) [ 72.495559] do_get_write_access: OOM for frozen_buffer [ 72.495560] EXT4-fs: ext4_reserve_inode_write:4729: aborting transaction: Out of memory in __ext4_journal_get_write_access [ 72.496839] do_get_write_access: OOM for frozen_buffer [ 72.496841] EXT4-fs: ext4_reserve_inode_write:4729: aborting transaction: Out of memory in __ext4_journal_get_write_access [ 72.505766] Aborting journal on device sda1-8. [ 72.505851] EXT4-fs (sda1): Remounting filesystem read-only This wasn't a problem until "mm: page_alloc: do not lock up GFP_NOFS allocations upon OOM" because small GPF_NOFS allocations never failed. This allocation seems essential for the journal and GFP_NOFS is too restrictive to the memory allocator so let's use __GFP_NOFAIL here to emulate the previous behavior. jbd code has the very same issue so let's do the same there as well. Signed-off-by: Michal Hocko <mhocko@suse.com> --- fs/jbd/transaction.c | 11 +---------- fs/jbd2/transaction.c | 23 ++++------------------- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index 1695ba8334a2..bf7474deda2f 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c @@ -673,16 +673,7 @@ do_get_write_access(handle_t *handle, struct journal_head *jh, jbd_unlock_bh_state(bh); frozen_buffer = jbd_alloc(jh2bh(jh)->b_size, - GFP_NOFS); - if (!frozen_buffer) { - printk(KERN_ERR - "%s: OOM for frozen_buffer\n", - __func__); - JBUFFER_TRACE(jh, "oom!"); - error = -ENOMEM; - jbd_lock_bh_state(bh); - goto done; - } + GFP_NOFS|__GFP_NOFAIL); goto repeat; } jh->b_frozen_data = frozen_buffer; diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index ff2f2e6ad311..4d63c5911afa 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c @@ -923,16 +923,7 @@ do_get_write_access(handle_t *handle, struct journal_head *jh, jbd_unlock_bh_state(bh); frozen_buffer = jbd2_alloc(jh2bh(jh)->b_size, - GFP_NOFS); - if (!frozen_buffer) { - printk(KERN_ERR - "%s: OOM for frozen_buffer\n", - __func__); - JBUFFER_TRACE(jh, "oom!"); - error = -ENOMEM; - jbd_lock_bh_state(bh); - goto done; - } + GFP_NOFS|__GFP_NOFAIL); goto repeat; } jh->b_frozen_data = frozen_buffer; @@ -1156,15 +1147,9 @@ int jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh) goto out; repeat: - if (!jh->b_committed_data) { - committed_data = jbd2_alloc(jh2bh(jh)->b_size, GFP_NOFS); - if (!committed_data) { - printk(KERN_ERR "%s: No memory for committed data\n", - __func__); - err = -ENOMEM; - goto out; - } - } + if (!jh->b_committed_data) + committed_data = jbd2_alloc(jh2bh(jh)->b_size, + GFP_NOFS|__GFP_NOFAIL); jbd_lock_bh_state(bh); if (!jh->b_committed_data) { -- 2.5.0 -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2015-08-18 10:38 UTC|newest] Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-08-05 9:51 [RFC 0/8] Allow GFP_NOFS allocation to fail mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` [RFC 1/8] mm, oom: Give __GFP_NOFAIL allocations access to memory reserves mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` [RFC 2/8] mm: Allow GFP_IOFS for page_cache_read page cache allocation mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` [RFC 3/8] mm: page_alloc: do not lock up GFP_NOFS allocations upon OOM mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 12:28 ` Tetsuo Handa 2015-08-05 14:02 ` Michal Hocko 2015-08-06 11:50 ` Tetsuo Handa 2015-08-12 9:11 ` Michal Hocko 2015-08-16 14:04 ` Tetsuo Handa 2015-08-05 9:51 ` [RFC 4/8] jbd, jbd2: Do not fail journal because of frozen_buffer allocation failure mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 11:42 ` Jan Kara 2015-08-05 11:42 ` Jan Kara 2015-08-05 16:49 ` Greg Thelen 2015-08-05 16:49 ` Greg Thelen 2015-08-12 9:14 ` Michal Hocko 2015-08-12 9:14 ` Michal Hocko 2015-08-15 13:54 ` Theodore Ts'o 2015-08-15 13:54 ` Theodore Ts'o 2015-08-18 10:36 ` Michal Hocko 2015-08-18 10:36 ` Michal Hocko 2015-08-24 12:06 ` Michal Hocko 2015-08-24 12:06 ` Michal Hocko 2015-08-18 10:38 ` Michal Hocko [this message] 2015-08-18 10:38 ` [RFC -v2 " Michal Hocko 2016-03-13 21:37 ` Theodore Ts'o 2015-08-05 9:51 ` [RFC 5/8] ext4: Do not fail journal due to block allocator mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 11:43 ` Jan Kara 2015-08-05 11:43 ` Jan Kara 2015-08-18 10:39 ` [RFC -v2 " Michal Hocko 2015-08-18 10:39 ` Michal Hocko 2015-08-18 10:55 ` Michal Hocko 2015-08-18 10:55 ` Michal Hocko 2015-08-05 9:51 ` [RFC 6/8] ext3: Do not abort journal prematurely mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-18 10:39 ` [RFC -v2 " Michal Hocko 2015-08-18 10:39 ` Michal Hocko 2015-08-05 9:51 ` [RFC 7/8] btrfs: Prevent from early transaction abort mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 16:31 ` David Sterba 2015-08-05 16:31 ` David Sterba 2015-08-18 10:40 ` [RFC -v2 " Michal Hocko 2015-08-18 10:40 ` Michal Hocko 2015-08-18 11:01 ` Michal Hocko 2015-08-18 11:01 ` Michal Hocko 2015-08-18 11:01 ` Michal Hocko 2015-08-18 17:11 ` Chris Mason 2015-08-18 17:11 ` Chris Mason 2015-08-18 17:11 ` Chris Mason 2015-08-18 17:29 ` Michal Hocko 2015-08-18 17:29 ` Michal Hocko 2015-08-19 12:26 ` Michal Hocko 2015-08-19 12:26 ` Michal Hocko 2015-08-05 9:51 ` [RFC 8/8] btrfs: use __GFP_NOFAIL in alloc_btrfs_bio mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 9:51 ` mhocko 2015-08-05 16:32 ` David Sterba 2015-08-05 16:32 ` David Sterba 2015-08-18 10:41 ` [RFC -v2 " Michal Hocko 2015-08-18 10:41 ` Michal Hocko 2015-08-05 19:58 ` [RFC 0/8] Allow GFP_NOFS allocation to fail Andreas Dilger 2015-08-05 19:58 ` Andreas Dilger 2015-08-06 14:34 ` Michal Hocko 2015-08-06 14:34 ` Michal Hocko 2015-08-06 14:34 ` Michal Hocko 2015-09-07 16:51 ` Tetsuo Handa 2015-09-07 16:51 ` Tetsuo Handa 2015-09-15 13:16 ` Tetsuo Handa 2015-09-15 13:16 ` Tetsuo Handa
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20150818103823.GC5033@dhcp22.suse.cz \ --to=mhocko@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=david@fromorbit.com \ --cc=hannes@cmpxchg.org \ --cc=jack@suse.cz \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=penguin-kernel@I-love.SAKURA.ne.jp \ --cc=tytso@mit.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.