ocfs2: return -EROFS when filesystem becomes read-only
We should return -EROFS rather than other errno if filesystem becomes read-only. [akpm@linux-foundation.org: coding-style fixes] Link: http://lkml.kernel.org/r/5B191B26.9010501@huawei.com Signed-off-by: Jun Piao <piaojun@huawei.com> Reviewed-by: Yiwen Jiang <jiangyiwen@huawei.com> Acked-by: Joseph Qi <jiangqi903@gmail.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <ge.changwei@h3c.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8d00d0c00c
commit
93f5920d86
@ -1481,19 +1481,17 @@ static int ocfs2_find_branch_target(struct ocfs2_extent_tree *et,
|
|||||||
|
|
||||||
while(le16_to_cpu(el->l_tree_depth) > 1) {
|
while(le16_to_cpu(el->l_tree_depth) > 1) {
|
||||||
if (le16_to_cpu(el->l_next_free_rec) == 0) {
|
if (le16_to_cpu(el->l_next_free_rec) == 0) {
|
||||||
ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
|
status = ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
|
||||||
"Owner %llu has empty extent list (next_free_rec == 0)\n",
|
"Owner %llu has empty extent list (next_free_rec == 0)\n",
|
||||||
(unsigned long long)ocfs2_metadata_cache_owner(et->et_ci));
|
(unsigned long long)ocfs2_metadata_cache_owner(et->et_ci));
|
||||||
status = -EIO;
|
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
i = le16_to_cpu(el->l_next_free_rec) - 1;
|
i = le16_to_cpu(el->l_next_free_rec) - 1;
|
||||||
blkno = le64_to_cpu(el->l_recs[i].e_blkno);
|
blkno = le64_to_cpu(el->l_recs[i].e_blkno);
|
||||||
if (!blkno) {
|
if (!blkno) {
|
||||||
ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
|
status = ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
|
||||||
"Owner %llu has extent list where extent # %d has no physical block start\n",
|
"Owner %llu has extent list where extent # %d has no physical block start\n",
|
||||||
(unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), i);
|
(unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), i);
|
||||||
status = -EIO;
|
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3214,8 +3212,7 @@ rightmost_no_delete:
|
|||||||
goto rightmost_no_delete;
|
goto rightmost_no_delete;
|
||||||
|
|
||||||
if (le16_to_cpu(el->l_next_free_rec) == 0) {
|
if (le16_to_cpu(el->l_next_free_rec) == 0) {
|
||||||
ret = -EIO;
|
ret = ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
|
||||||
ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
|
|
||||||
"Owner %llu has empty extent block at %llu\n",
|
"Owner %llu has empty extent block at %llu\n",
|
||||||
(unsigned long long)ocfs2_metadata_cache_owner(et->et_ci),
|
(unsigned long long)ocfs2_metadata_cache_owner(et->et_ci),
|
||||||
(unsigned long long)le64_to_cpu(eb->h_blkno));
|
(unsigned long long)le64_to_cpu(eb->h_blkno));
|
||||||
@ -4411,12 +4408,11 @@ static int ocfs2_figure_merge_contig_type(struct ocfs2_extent_tree *et,
|
|||||||
le16_to_cpu(new_el->l_count)) {
|
le16_to_cpu(new_el->l_count)) {
|
||||||
bh = path_leaf_bh(left_path);
|
bh = path_leaf_bh(left_path);
|
||||||
eb = (struct ocfs2_extent_block *)bh->b_data;
|
eb = (struct ocfs2_extent_block *)bh->b_data;
|
||||||
ocfs2_error(sb,
|
status = ocfs2_error(sb,
|
||||||
"Extent block #%llu has an invalid l_next_free_rec of %d. It should have matched the l_count of %d\n",
|
"Extent block #%llu has an invalid l_next_free_rec of %d. It should have matched the l_count of %d\n",
|
||||||
(unsigned long long)le64_to_cpu(eb->h_blkno),
|
(unsigned long long)le64_to_cpu(eb->h_blkno),
|
||||||
le16_to_cpu(new_el->l_next_free_rec),
|
le16_to_cpu(new_el->l_next_free_rec),
|
||||||
le16_to_cpu(new_el->l_count));
|
le16_to_cpu(new_el->l_count));
|
||||||
status = -EINVAL;
|
|
||||||
goto free_left_path;
|
goto free_left_path;
|
||||||
}
|
}
|
||||||
rec = &new_el->l_recs[
|
rec = &new_el->l_recs[
|
||||||
@ -4466,11 +4462,10 @@ static int ocfs2_figure_merge_contig_type(struct ocfs2_extent_tree *et,
|
|||||||
if (le16_to_cpu(new_el->l_next_free_rec) <= 1) {
|
if (le16_to_cpu(new_el->l_next_free_rec) <= 1) {
|
||||||
bh = path_leaf_bh(right_path);
|
bh = path_leaf_bh(right_path);
|
||||||
eb = (struct ocfs2_extent_block *)bh->b_data;
|
eb = (struct ocfs2_extent_block *)bh->b_data;
|
||||||
ocfs2_error(sb,
|
status = ocfs2_error(sb,
|
||||||
"Extent block #%llu has an invalid l_next_free_rec of %d\n",
|
"Extent block #%llu has an invalid l_next_free_rec of %d\n",
|
||||||
(unsigned long long)le64_to_cpu(eb->h_blkno),
|
(unsigned long long)le64_to_cpu(eb->h_blkno),
|
||||||
le16_to_cpu(new_el->l_next_free_rec));
|
le16_to_cpu(new_el->l_next_free_rec));
|
||||||
status = -EINVAL;
|
|
||||||
goto free_right_path;
|
goto free_right_path;
|
||||||
}
|
}
|
||||||
rec = &new_el->l_recs[1];
|
rec = &new_el->l_recs[1];
|
||||||
|
@ -663,11 +663,10 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
|
|||||||
#ifdef CONFIG_OCFS2_DEBUG_FS
|
#ifdef CONFIG_OCFS2_DEBUG_FS
|
||||||
if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
|
if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
|
||||||
ocfs2_local_alloc_count_bits(alloc)) {
|
ocfs2_local_alloc_count_bits(alloc)) {
|
||||||
ocfs2_error(osb->sb, "local alloc inode %llu says it has %u used bits, but a count shows %u\n",
|
status = ocfs2_error(osb->sb, "local alloc inode %llu says it has %u used bits, but a count shows %u\n",
|
||||||
(unsigned long long)le64_to_cpu(alloc->i_blkno),
|
(unsigned long long)le64_to_cpu(alloc->i_blkno),
|
||||||
le32_to_cpu(alloc->id1.bitmap1.i_used),
|
le32_to_cpu(alloc->id1.bitmap1.i_used),
|
||||||
ocfs2_local_alloc_count_bits(alloc));
|
ocfs2_local_alloc_count_bits(alloc));
|
||||||
status = -EIO;
|
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -137,14 +137,13 @@ static int ocfs2_read_quota_block(struct inode *inode, u64 v_block,
|
|||||||
int rc = 0;
|
int rc = 0;
|
||||||
struct buffer_head *tmp = *bh;
|
struct buffer_head *tmp = *bh;
|
||||||
|
|
||||||
if (i_size_read(inode) >> inode->i_sb->s_blocksize_bits <= v_block) {
|
if (i_size_read(inode) >> inode->i_sb->s_blocksize_bits <= v_block)
|
||||||
ocfs2_error(inode->i_sb,
|
return ocfs2_error(inode->i_sb,
|
||||||
"Quota file %llu is probably corrupted! Requested to read block %Lu but file has size only %Lu\n",
|
"Quota file %llu is probably corrupted! Requested to read block %Lu but file has size only %Lu\n",
|
||||||
(unsigned long long)OCFS2_I(inode)->ip_blkno,
|
(unsigned long long)OCFS2_I(inode)->ip_blkno,
|
||||||
(unsigned long long)v_block,
|
(unsigned long long)v_block,
|
||||||
(unsigned long long)i_size_read(inode));
|
(unsigned long long)i_size_read(inode));
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
rc = ocfs2_read_virt_blocks(inode, v_block, 1, &tmp, 0,
|
rc = ocfs2_read_virt_blocks(inode, v_block, 1, &tmp, 0,
|
||||||
ocfs2_validate_quota_block);
|
ocfs2_validate_quota_block);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
Loading…
Reference in New Issue
Block a user