ocfs2: return -EROFS when filesystem becomes read-only
authorJun Piao <piaojun@huawei.com>
Fri, 17 Aug 2018 22:44:24 +0000 (15:44 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 17 Aug 2018 23:20:27 +0000 (16:20 -0700)
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>
fs/ocfs2/alloc.c
fs/ocfs2/localalloc.c
fs/ocfs2/quota_local.c

index 0f157bb..676714f 100644 (file)
@@ -1481,19 +1481,17 @@ static int ocfs2_find_branch_target(struct ocfs2_extent_tree *et,
 
        while(le16_to_cpu(el->l_tree_depth) > 1) {
                if (le16_to_cpu(el->l_next_free_rec) == 0) {
-                       ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
-                                   "Owner %llu has empty extent list (next_free_rec == 0)\n",
-                                   (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci));
-                       status = -EIO;
+                       status = ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
+                                       "Owner %llu has empty extent list (next_free_rec == 0)\n",
+                                       (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci));
                        goto bail;
                }
                i = le16_to_cpu(el->l_next_free_rec) - 1;
                blkno = le64_to_cpu(el->l_recs[i].e_blkno);
                if (!blkno) {
-                       ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
-                                   "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);
-                       status = -EIO;
+                       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",
+                                       (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci), i);
                        goto bail;
                }
 
@@ -3214,11 +3212,10 @@ rightmost_no_delete:
                        goto rightmost_no_delete;
 
                if (le16_to_cpu(el->l_next_free_rec) == 0) {
-                       ret = -EIO;
-                       ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
-                                   "Owner %llu has empty extent block at %llu\n",
-                                   (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci),
-                                   (unsigned long long)le64_to_cpu(eb->h_blkno));
+                       ret = ocfs2_error(ocfs2_metadata_cache_get_super(et->et_ci),
+                                       "Owner %llu has empty extent block at %llu\n",
+                                       (unsigned long long)ocfs2_metadata_cache_owner(et->et_ci),
+                                       (unsigned long long)le64_to_cpu(eb->h_blkno));
                        goto out;
                }
 
@@ -4411,12 +4408,11 @@ static int ocfs2_figure_merge_contig_type(struct ocfs2_extent_tree *et,
                            le16_to_cpu(new_el->l_count)) {
                                bh = path_leaf_bh(left_path);
                                eb = (struct ocfs2_extent_block *)bh->b_data;
-                               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",
-                                           (unsigned long long)le64_to_cpu(eb->h_blkno),
-                                           le16_to_cpu(new_el->l_next_free_rec),
-                                           le16_to_cpu(new_el->l_count));
-                               status = -EINVAL;
+                               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",
+                                               (unsigned long long)le64_to_cpu(eb->h_blkno),
+                                               le16_to_cpu(new_el->l_next_free_rec),
+                                               le16_to_cpu(new_el->l_count));
                                goto free_left_path;
                        }
                        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) {
                                bh = path_leaf_bh(right_path);
                                eb = (struct ocfs2_extent_block *)bh->b_data;
-                               ocfs2_error(sb,
-                                           "Extent block #%llu has an invalid l_next_free_rec of %d\n",
-                                           (unsigned long long)le64_to_cpu(eb->h_blkno),
-                                           le16_to_cpu(new_el->l_next_free_rec));
-                               status = -EINVAL;
+                               status = ocfs2_error(sb,
+                                               "Extent block #%llu has an invalid l_next_free_rec of %d\n",
+                                               (unsigned long long)le64_to_cpu(eb->h_blkno),
+                                               le16_to_cpu(new_el->l_next_free_rec));
                                goto free_right_path;
                        }
                        rec = &new_el->l_recs[1];
index fe0d1f9..7642b67 100644 (file)
@@ -663,11 +663,10 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
 #ifdef CONFIG_OCFS2_DEBUG_FS
        if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
            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",
-                           (unsigned long long)le64_to_cpu(alloc->i_blkno),
-                           le32_to_cpu(alloc->id1.bitmap1.i_used),
-                           ocfs2_local_alloc_count_bits(alloc));
-               status = -EIO;
+               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),
+                               le32_to_cpu(alloc->id1.bitmap1.i_used),
+                               ocfs2_local_alloc_count_bits(alloc));
                goto bail;
        }
 #endif
index 16c42ed..b1a8b04 100644 (file)
@@ -137,14 +137,13 @@ static int ocfs2_read_quota_block(struct inode *inode, u64 v_block,
        int rc = 0;
        struct buffer_head *tmp = *bh;
 
-       if (i_size_read(inode) >> inode->i_sb->s_blocksize_bits <= v_block) {
-               ocfs2_error(inode->i_sb,
-                           "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)v_block,
-                           (unsigned long long)i_size_read(inode));
-               return -EIO;
-       }
+       if (i_size_read(inode) >> inode->i_sb->s_blocksize_bits <= v_block)
+               return ocfs2_error(inode->i_sb,
+                               "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)v_block,
+                               (unsigned long long)i_size_read(inode));
+
        rc = ocfs2_read_virt_blocks(inode, v_block, 1, &tmp, 0,
                                    ocfs2_validate_quota_block);
        if (rc)