GFS2: let spectator mount do read only recovery
Previously, a spectator mount would not even attempt to do journal recovery for a failed node. This meant that if all mounted nodes were spectators, everyone would be stuck after a node failed, all waiting for recovery to be performed. This is unnecessary since the failed node had a clean journal. Instead, allow a spectator mount to do a partial "read only" recovery, which means it will check if the failed journal is clean, and if so, report a successful recovery. If the failed journal is not clean, it reports that journal recovery failed. This makes it work the same as a read only mount on a read only block device. Signed-off-by: David Teigland <teigland@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
49528b4e47
commit
e8ca5cc571
|
@ -498,6 +498,7 @@ enum {
|
|||
SDF_NORECOVERY = 4,
|
||||
SDF_DEMOTE = 5,
|
||||
SDF_NOJOURNALID = 6,
|
||||
SDF_RORECOVERY = 7, /* read only recovery */
|
||||
};
|
||||
|
||||
#define GFS2_FSNAME_LEN 256
|
||||
|
|
|
@ -1078,7 +1078,7 @@ static int fill_super(struct super_block *sb, struct gfs2_args *args, int silent
|
|||
|
||||
if (sdp->sd_args.ar_spectator) {
|
||||
sb->s_flags |= MS_RDONLY;
|
||||
set_bit(SDF_NORECOVERY, &sdp->sd_flags);
|
||||
set_bit(SDF_RORECOVERY, &sdp->sd_flags);
|
||||
}
|
||||
if (sdp->sd_args.ar_posix_acl)
|
||||
sb->s_flags |= MS_POSIXACL;
|
||||
|
|
|
@ -516,7 +516,9 @@ void gfs2_recover_func(struct work_struct *work)
|
|||
if (error)
|
||||
goto fail_gunlock_ji;
|
||||
|
||||
if (test_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags)) {
|
||||
if (test_bit(SDF_RORECOVERY, &sdp->sd_flags)) {
|
||||
ro = 1;
|
||||
} else if (test_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags)) {
|
||||
if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))
|
||||
ro = 1;
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue