|
@@ -504,13 +504,21 @@ int gfs2_recover_journal(struct gfs2_jdesc *jd)
|
|
|
if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))
|
|
|
ro = 1;
|
|
|
} else {
|
|
|
- if (sdp->sd_vfs->s_flags & MS_RDONLY)
|
|
|
- ro = 1;
|
|
|
+ if (sdp->sd_vfs->s_flags & MS_RDONLY) {
|
|
|
+ /* check if device itself is read-only */
|
|
|
+ ro = bdev_read_only(sdp->sd_vfs->s_bdev);
|
|
|
+ if (!ro) {
|
|
|
+ fs_info(sdp, "recovery required on "
|
|
|
+ "read-only filesystem.\n");
|
|
|
+ fs_info(sdp, "write access will be "
|
|
|
+ "enabled during recovery.\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (ro) {
|
|
|
- fs_warn(sdp, "jid=%u: Can't replay: read-only FS\n",
|
|
|
- jd->jd_jid);
|
|
|
+ fs_warn(sdp, "jid=%u: Can't replay: read-only block "
|
|
|
+ "device\n", jd->jd_jid);
|
|
|
error = -EROFS;
|
|
|
goto fail_gunlock_tr;
|
|
|
}
|