Hi,

Those look like a good start, but we also need to figure out how to push
the error handling back into the apps too, 

Steve.

On Wed, 2011-12-14 at 16:20 +0000, Andrew Price wrote:
> Expand out the calls to die() to prepare for the removal of the function
> from libgfs2.h
> 
> Signed-off-by: Andrew Price <[email protected]>
> ---
>  gfs2/libgfs2/fs_ops.c |   67 
> ++++++++++++++++++++++++++++++++-----------------
>  gfs2/libgfs2/gfs1.c   |   12 ++++++---
>  2 files changed, 52 insertions(+), 27 deletions(-)
> 
> diff --git a/gfs2/libgfs2/fs_ops.c b/gfs2/libgfs2/fs_ops.c
> index e2e64d6..befa25a 100644
> --- a/gfs2/libgfs2/fs_ops.c
> +++ b/gfs2/libgfs2/fs_ops.c
> @@ -136,8 +136,10 @@ static uint64_t blk_alloc_i(struct gfs2_sbd *sdp, 
> unsigned int type)
>                       break;
>       }
>  
> -     if (n == NULL)
> -             die("out of space\n");
> +     if (n == NULL) {
> +             fprintf(stderr, "out of space\n");
> +             exit(1);
> +     }
>  
>       ri = &rl->ri;
>       rg = &rl->rg;
> @@ -155,15 +157,18 @@ static uint64_t blk_alloc_i(struct gfs2_sbd *sdp, 
> unsigned int type)
>                       }
>       }
>  
> -     die("allocation is broken (1): %"PRIu64" %u\n",
> +     fprintf(stderr, "allocation is broken (1): %"PRIu64" %u\n",
>           (uint64_t)rl->ri.ri_addr, rl->rg.rg_free);
> +     exit(1);
>  
>  found:
> -     if (bn >= ri->ri_bitbytes * GFS2_NBBY)
> -             die("allocation is broken (2): bn: %u %u rgrp: %"PRIu64
> +     if (bn >= ri->ri_bitbytes * GFS2_NBBY) {
> +             fprintf(stderr, "allocation is broken (2): bn: %u %u rgrp: 
> %"PRIu64
>                   " (0x%" PRIx64 ") Free:%u\n",
>                   bn, ri->ri_bitbytes * GFS2_NBBY, (uint64_t)rl->ri.ri_addr,
>                   (uint64_t)rl->ri.ri_addr, rl->rg.rg_free);
> +             exit(1);
> +     }
>  
>       switch (type) {
>       case DATA:
> @@ -175,7 +180,8 @@ found:
>               rg->rg_dinodes++;
>               break;
>       default:
> -             die("bad state\n");
> +             fprintf(stderr, "bad state\n");
> +             exit(1);
>       }
>  
>       bh->b_data[x] &= ~(0x03 << (GFS2_BIT_SIZE * y));
> @@ -684,8 +690,10 @@ struct gfs2_buffer_head *get_file_buf(struct gfs2_inode 
> *ip, uint64_t lbn,
>               unstuff_dinode(ip);
>  
>       block_map(ip, lbn, &new, &dbn, NULL, prealloc);
> -     if (!dbn)
> -             die("get_file_buf\n");
> +     if (!dbn) {
> +             fprintf(stderr, "get_file_buf\n");
> +             exit(1);
> +     }
>  
>       if (!prealloc && new &&
>           ip->i_di.di_size < (lbn + 1) << sdp->sd_sb.sb_bsize_shift) {
> @@ -841,8 +849,10 @@ void gfs2_get_leaf_nr(struct gfs2_inode *dip, uint32_t 
> lindex,
>               return gfs_get_leaf_nr(dip, lindex, leaf_out);
>       count = gfs2_readi(dip, (char *)&leaf_no, lindex * sizeof(uint64_t),
>                          sizeof(uint64_t));
> -     if (count != sizeof(uint64_t))
> -             die("gfs2_get_leaf_nr:  Bad internal read.\n");
> +     if (count != sizeof(uint64_t)) {
> +             fprintf(stderr, "gfs2_get_leaf_nr:  Bad internal read.\n");
> +             exit(1);
> +     }
>  
>       *leaf_out = be64_to_cpu(leaf_no);
>  }
> @@ -859,8 +869,10 @@ void gfs2_put_leaf_nr(struct gfs2_inode *dip, uint32_t 
> inx, uint64_t leaf_out)
>       leaf_no = cpu_to_be64(leaf_out);
>       count = gfs2_writei(dip, (char *)&leaf_no, inx * sizeof(uint64_t),
>                           sizeof(uint64_t));
> -     if (count != sizeof(uint64_t))
> -             die("gfs2_put_leaf_nr:  Bad internal write.\n");
> +     if (count != sizeof(uint64_t)) {
> +             fprintf(stderr, "gfs2_put_leaf_nr:  Bad internal write.\n");
> +             exit(1);
> +     }
>  }
>  
>  static void dir_split_leaf(struct gfs2_inode *dip, uint32_t lindex,
> @@ -912,8 +924,10 @@ static void dir_split_leaf(struct gfs2_inode *dip, 
> uint32_t lindex,
>       else
>               count = gfs2_writei(dip, (char *)lp, start * sizeof(uint64_t),
>                                   half_len * sizeof(uint64_t));
> -     if (count != half_len * sizeof(uint64_t))
> -             die("dir_split_leaf (2)\n");
> +     if (count != half_len * sizeof(uint64_t)) {
> +             fprintf(stderr, "dir_split_leaf (2)\n");
> +             exit(1);
> +     }
>  
>       free(lp);
>  
> @@ -930,8 +944,10 @@ static void dir_split_leaf(struct gfs2_inode *dip, 
> uint32_t lindex,
>                   be32_to_cpu(dent->de_hash) < divider) {
>                       name_len = be16_to_cpu(dent->de_name_len);
>  
> -                     if (dirent_alloc(dip, nbh, name_len, &new))
> -                             die("dir_split_leaf (3)\n");
> +                     if (dirent_alloc(dip, nbh, name_len, &new)) {
> +                             fprintf(stderr, "dir_split_leaf (3)\n");
> +                             exit(1);
> +                     }
>  
>                       new->de_inum = dent->de_inum;
>                       new->de_hash = dent->de_hash;
> @@ -954,8 +970,10 @@ static void dir_split_leaf(struct gfs2_inode *dip, 
> uint32_t lindex,
>       } while (dent);
>  
>       if (!moved) {
> -             if (dirent_alloc(dip, nbh, 0, &new))
> -                     die("dir_split_leaf (4)\n");
> +             if (dirent_alloc(dip, nbh, 0, &new)) {
> +                     fprintf(stderr, "dir_split_leaf (4)\n");
> +                     exit(1);
> +             }
>               new->de_inum.no_formal_ino = 0;
>               /* Don't count the sentinel dirent as an entry */
>               dip->i_di.di_entries--;
> @@ -993,8 +1011,10 @@ static void dir_double_exhash(struct gfs2_inode *dip)
>               count = gfs2_readi(dip, (char *)buf,
>                             block * sdp->sd_hash_bsize,
>                             sdp->sd_hash_bsize);
> -             if (count != sdp->sd_hash_bsize)
> -                     die("dir_double_exhash (1)\n");
> +             if (count != sdp->sd_hash_bsize) {
> +                     fprintf(stderr, "dir_double_exhash (1)\n");
> +                     exit(1);
> +             }
>  
>               from = buf;
>               to = (uint64_t *)((char *)buf + sdp->sd_hash_bsize);
> @@ -1012,9 +1032,10 @@ static void dir_double_exhash(struct gfs2_inode *dip)
>                       count = gfs2_writei(dip, (char *)buf +
>                                           sdp->sd_hash_bsize,
>                                           block * sdp->bsize, sdp->bsize);
> -             if (count != sdp->bsize)
> -                     die("dir_double_exhash (2)\n");
> -
> +             if (count != sdp->bsize) {
> +                     fprintf(stderr, "dir_double_exhash (2)\n");
> +                     exit(1);
> +             }
>       }
>  
>       free(buf);
> diff --git a/gfs2/libgfs2/gfs1.c b/gfs2/libgfs2/gfs1.c
> index 4549959..8e3fc93 100644
> --- a/gfs2/libgfs2/gfs1.c
> +++ b/gfs2/libgfs2/gfs1.c
> @@ -403,8 +403,10 @@ void gfs_get_leaf_nr(struct gfs2_inode *dip, uint32_t 
> lindex,
>  
>       count = gfs2_readi(dip, (char *)&leaf_no, lindex * sizeof(uint64_t),
>                          sizeof(uint64_t));
> -     if (count != sizeof(uint64_t))
> -             die("gfs_get_leaf_nr:  Bad internal read.\n");
> +     if (count != sizeof(uint64_t)) {
> +             fprintf(stderr, "gfs_get_leaf_nr:  Bad internal read.\n");
> +             exit(1);
> +     }
>  
>       *leaf_out = be64_to_cpu(leaf_no);
>  }
> @@ -417,6 +419,8 @@ void gfs_put_leaf_nr(struct gfs2_inode *dip, uint32_t 
> inx, uint64_t leaf_out)
>       leaf_no = cpu_to_be64(leaf_out);
>       count = gfs1_writei(dip, (char *)&leaf_no, inx * sizeof(uint64_t),
>                          sizeof(uint64_t));
> -     if (count != sizeof(uint64_t))
> -             die("gfs_put_leaf_nr:  Bad internal write.\n");
> +     if (count != sizeof(uint64_t)) {
> +             fprintf(stderr, "gfs_put_leaf_nr:  Bad internal write.\n");
> +             exit(1);
> +     }
>  }


Reply via email to