From: Steven Whitehouse <swhiteho@redhat.com>
To: linux-kernel@vger.kernel.org, cluster-devel@redhat.com
Cc: Steven Whitehouse <steve@chygwyn.com>,
Steven Whitehouse <swhiteho@redhat.com>
Subject: [PATCH 04/16] GFS2: Fix error handling when reading an invalid block from the journal
Date: Mon, 23 Jul 2012 09:00:54 +0100 [thread overview]
Message-ID: <1343030466-3053-5-git-send-email-swhiteho@redhat.com> (raw)
In-Reply-To: <1343030466-3053-1-git-send-email-swhiteho@redhat.com>
From: Steven Whitehouse <steve@chygwyn.com>
When we read an invalid block from the journal, we should not call
withdraw, but simply print a message and return an error. It is
up to the caller to then handle that error. In the case of mount
that means a failed mount, rather than a withdraw (requiring a
reboot). In the case of recovering another nodes journal then
we return an error via the uevent.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
index 852c1be..8ff95a2 100644
--- a/fs/gfs2/lops.c
+++ b/fs/gfs2/lops.c
@@ -401,9 +401,14 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
goto out;
set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags);
set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags);
- gfs2_meta_check(sdp, bd->bd_bh);
- gfs2_pin(sdp, bd->bd_bh);
mh = (struct gfs2_meta_header *)bd->bd_bh->b_data;
+ if (unlikely(mh->mh_magic != cpu_to_be32(GFS2_MAGIC))) {
+ printk(KERN_ERR
+ "Attempting to add uninitialised block to journal (inplace block=%lld)\n",
+ (unsigned long long)bd->bd_bh->b_blocknr);
+ BUG();
+ }
+ gfs2_pin(sdp, bd->bd_bh);
mh->__pad0 = cpu_to_be64(0);
mh->mh_jid = cpu_to_be32(sdp->sd_jdesc->jd_jid);
sdp->sd_log_num_buf++;
diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
index 3586b0d..8053573 100644
--- a/fs/gfs2/util.h
+++ b/fs/gfs2/util.h
@@ -79,23 +79,19 @@ int gfs2_meta_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
const char *type, const char *function,
char *file, unsigned int line);
-static inline int gfs2_meta_check_i(struct gfs2_sbd *sdp,
- struct buffer_head *bh,
- const char *function,
- char *file, unsigned int line)
+static inline int gfs2_meta_check(struct gfs2_sbd *sdp,
+ struct buffer_head *bh)
{
struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
u32 magic = be32_to_cpu(mh->mh_magic);
- if (unlikely(magic != GFS2_MAGIC))
- return gfs2_meta_check_ii(sdp, bh, "magic number", function,
- file, line);
+ if (unlikely(magic != GFS2_MAGIC)) {
+ printk(KERN_ERR "GFS2: Magic number missing at %llu\n",
+ (unsigned long long)bh->b_blocknr);
+ return -EIO;
+ }
return 0;
}
-#define gfs2_meta_check(sdp, bh) \
-gfs2_meta_check_i((sdp), (bh), __func__, __FILE__, __LINE__)
-
-
int gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
u16 type, u16 t,
const char *function,
--
1.7.4
next prev parent reply other threads:[~2012-07-23 8:27 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-23 8:00 GFS2: Pre-pull patch posting (merge window) Steven Whitehouse
2012-07-23 8:00 ` [PATCH 01/16] GFS2: Extend the life of the reservations Steven Whitehouse
2012-07-23 8:00 ` [PATCH 02/16] GFS2: Fold quota data into the reservations struct Steven Whitehouse
2012-07-23 8:00 ` [PATCH 03/16] GFS2: Add "top dir" flag support Steven Whitehouse
2012-07-23 8:00 ` Steven Whitehouse [this message]
2012-07-23 8:00 ` [PATCH 05/16] GFS2: Increase buffer size for glocks and glstats debugfs files Steven Whitehouse
2012-07-23 8:00 ` [PATCH 06/16] GFS2: Cache last hash bucket for glock seq_files Steven Whitehouse
2012-07-23 8:00 ` [PATCH 07/16] GFS2: Use lvbs for storing rgrp information with mount option Steven Whitehouse
2012-07-23 8:00 ` [PATCH 08/16] seq_file: Add seq_vprintf function and export it Steven Whitehouse
2012-07-23 8:00 ` [PATCH 09/16] GFS2: Use seq_vprintf for glocks debugfs file Steven Whitehouse
2012-07-23 8:01 ` [PATCH 10/16] GFS2: Size seq_file buffer more carefully Steven Whitehouse
2012-07-23 8:01 ` [PATCH 11/16] GFS2: Add kobject release method Steven Whitehouse
2012-07-23 8:01 ` [PATCH 12/16] GFS2: Combine functions get_local_rgrp and gfs2_inplace_reserve Steven Whitehouse
2012-07-23 8:01 ` [PATCH 13/16] GFS2: Fixing double brelse'ing bh allocated in gfs2_meta_read when EIO occurs Steven Whitehouse
2012-07-23 8:01 ` [PATCH 14/16] GFS2: kernel panic with small gfs2 filesystems - 1 RG Steven Whitehouse
2012-07-23 8:01 ` [PATCH 15/16] GFS2: Reduce file fragmentation Steven Whitehouse
2012-07-23 8:01 ` [PATCH 16/16] GFS2: Eliminate 64-bit divides Steven Whitehouse
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=1343030466-3053-5-git-send-email-swhiteho@redhat.com \
--to=swhiteho@redhat.com \
--cc=cluster-devel@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=steve@chygwyn.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®