[Ocfs2-tools-devel] [PATCH v2] mount.ocfs2: return -EROFS if file system is readonly

piaojun piaojun at huawei.com
Thu Dec 28 02:56:07 PST 2017


Hi Eric,

On 2017/12/28 18:49, Eric Ren wrote:
> Hi Jun,
> 
> On 12/28/2017 06:30 PM, piaojun wrote:
>> If metadata is corrupted such as 'invalid inode block', we will get
>> -EROFS by calling 'mount()'. In this situation we need fix it by fsck,
>> and mount again rather than doing meaningless retry. In addition, an
>> indentation problem in 'ocfs2_err.et' is fixed.
>>
>> Signed-off-by: Jun Piao <piaojun at huawei.com>
>> ---
>>   libocfs2/ocfs2_err.et     |  4 ++--
>>   mount.ocfs2/mount.ocfs2.c | 12 +++++++++---
>>   2 files changed, 11 insertions(+), 5 deletions(-)
>>
>> diff --git a/libocfs2/ocfs2_err.et b/libocfs2/ocfs2_err.et
>> index 34cefed..3dc0ce2 100644
>> --- a/libocfs2/ocfs2_err.et
>> +++ b/libocfs2/ocfs2_err.et
>> @@ -168,8 +168,8 @@ ec    OCFS2_ET_NO_IONICE,
>>   ec    OCFS2_ET_NO_BACKUP_SUPER,
>>       "Backup superblock not found"
>>
>> -ec      OCFS2_ET_TOO_MANY_SLOTS,
>> -        "Too many slots for slot map"
>> +ec    OCFS2_ET_TOO_MANY_SLOTS,
>> +    "Too many slots for slot map"
>>
>>   ec    OCFS2_ET_CANNOT_INLINE_DATA,
>>       "Unable to write the data inline"
>> diff --git a/mount.ocfs2/mount.ocfs2.c b/mount.ocfs2/mount.ocfs2.c
>> index e3d8871..c6e8226 100644
>> --- a/mount.ocfs2/mount.ocfs2.c
>> +++ b/mount.ocfs2/mount.ocfs2.c
>> @@ -434,8 +434,14 @@ int main(int argc, char **argv)
>>               o2cb_complete_group_join(&cluster, &desc, errno);
>>           }
>>           block_signals (SIG_UNBLOCK);
>> -        com_err(progname, ret, "while mounting %s on %s. Check 'dmesg' "
>> -            "for more information on this error.", mo.dev, mo.dir);
>> +        if (ret == -EROFS)
>> +            com_err(progname, OCFS2_ET_RO_FILESYS, "while mounting %s "
>> +                "on %s, please try fixing this by fsck.ocfs2 and then "
>> +                "retry mounting", mo.dev, mo.dir);
>> +        else
>> +            com_err(progname, OCFS2_ET_INTERNAL_FAILURE,
>> +                "while mounting %s on %s. Check 'dmesg' for more "
>> +                "information on this error.", mo.dev, mo.dir);
> 
> The other looks good to me, but why do you change com_error(..., ret, ..) to com_err(..., OCFS2_ET_INTERNAL_FAILURE,...)?
> 
> Thanks,
> Eric
> 

Actually this is a misuse of error type. We should pass 'OCFS2_ET_*' in
com_err() rather than 'linux errno'. I fix it up in passing.

thanks,
Jun

> .
> 



More information about the Ocfs2-tools-devel mailing list