Evan Layton wrote: > Jean McCormack wrote: >> be_activate.c >> line 606+ >> I'm concerned that err is declared a uint_t and then is returned. >> Note that the function returns an int. >> I also wonder about the code (you didn't modify it but deals with err >> and errno) at lines 634-638. >> > > I'm not sure how or why this ended up being unit_t but it should be an > int. > As for lines 634-638 we're capturing the errno and translating it into > a BE error code. Fixed. > > >> be_create.c: >> line 2404: This will be ok in this case but note that before i was >> undefined and now you've initialized it to 0. Reverted that. >> >> be_mount.c: >> line 680: should that be comparing to != BE_SUCCESS? Yes, I'm going back through and changing this and similar instances. >> >> be_rename.c: >> line 139: I'm wondering how ret can be anything but 0 at this point? >> Is the else dead code? > > ret should be getting set at line 134 but it looks like that got > removed at some point. :-( > > it should look more like this: > 134 if ((ret = zpool_iter(g_zfs, be_find_zpool_callback, > &bt)) == 0) { > 135 be_print_err(gettext("be_rename: failed to " > 136 "find zpool for BE (%s)\n"), bt.obe_name); > 137 be_zfs_fini(); > 138 return (BE_ERR_BE_NOENT); > 139 } else if (ret < 0) { > 140 be_print_err(gettext("be_rename: zpool_iter > failed: %s\n"), > 141 libzfs_error_description(g_zfs)); > 142 ret = zfs_err_to_be_err(g_zfs); > 143 be_zfs_fini(); > 144 return (ret); > 145 } > Fixed. > >> >> be_utils.c >> line 1114: Should you be comparing to BE_SUCCESS? >> line 3296: same thing >> >> be_zones.c: >> line 412: should you be comparing to BE_SUCCESS? >> >> You might want to look for the general case where you see something >> like this: >> >> (ret = be_function_call()) != 0 >> >> You might need to be comparing to BE_SUCCESS Yes, I'll go back through and make that change. >> >> Jean >> ===== > Hi Keith, > > be_create.c: > ============= > line 526 zret should probably be just ret and line 531 can probably be > removed. Done. > > line 591 zret should be initialized to 0 (or BE_SUCESS since it's > used for both zfs_iter function return codes and be_clone_fs_callback). Done. > It might be best as part of this to clean up these return variables so > we make the use of things like err, zret and ret consistent. This > needs to be looked at throughout... > Maybe something like: > err for capturing errno's > zret for capturing zfs related errors > ret for returning BE errors and errors that have been translated into > BE errors. Ok. I'll go through again and clean up these instances. > > 1796 ret is defined here and again at line 1886. The second one isn't > needed and should be removed. Fixed. > > 2148 - 2150 returns err but doesn't set it so we could be sending an > error from somewhere else or just what was initialized. This needs an > actual error message. err is set at line 2139. However, The inner 'if' statement is kind of backwards. I'll change it to:
2139 if ((err = zfs_iter_filesystems(zhp, be_clone_fs_callback, bt)) != 0) { 2140 /* 2141 * Error occurred while processing a child dataset. 2142 * Destroy this dataset and return error. 2143 */ 2144 zfs_handle_t *d_zhp = NULL; 2145 2146 ZFS_CLOSE(zhp); 2147 2148 if ((d_zhp = zfs_open(g_zfs, clone_ds, ZFS_TYPE_FILESYSTEM)) 2149 != NULL) { (void) zfs_destroy(d_zhp); ZFS_CLOSE(d_zhp); 2150 2151 } 2155 return (err); 2156 } This is logically equivalent to the previous but doesn't have the same 'backwardness' to it. > > be_mount.c: > =========== > lines 238 and 395 ret should also be set to BE_SUCCESS Fixed. > > 1441 set err = BE_SUCCESS? Yes, done. > > > Other than these I don't see anything that hasn't already been mentioned. > > -evan New webrev will be posted after I've: * changed relevant "== 0" statements to "== BE_SUCCESS" * reviewed instances of err, errno, ret and zret for consistent usage * run the DIY libbe test against the changes - Keith