static int set_journal_block64_run(struct tunefs_operation *op, ocfs2_filesys *fs, int flags) { errcode_t err; int rc = 0; ocfs2_fs_options mask, options; struct ocfs2_super_block *super = OCFS2_RAW_SB(fs->fs_super); memset(&mask, 0, sizeof(ocfs2_fs_options)); memset(&options, 0, sizeof(ocfs2_fs_options)); mask.opt_incompat |= JBD2_FEATURE_INCOMPAT_64BIT; options.opt_incompat |= JBD2_FEATURE_INCOMPAT_64BIT; if (!tools_interact("Enable block64 journal feature on device \"%s\"? ", fs->fs_devname)) goto out; tunefs_block_signals(); super->s_feature_compat |= OCFS2_FEATURE_COMPAT_JBD2_SB; err = ocfs2_write_super(fs); if (!err) err = tunefs_set_journal_size(fs, 0, mask, options); tunefs_unblock_signals(); if (err) { rc = 1; tcom_err(err, "; unable to enable block64 journal feature on " "device \"%s\"", fs->fs_devname); } out: return rc; }
static int set_journal_block32_run(struct tunefs_operation *op, ocfs2_filesys *fs, int flags) { errcode_t err; int rc = 0; ocfs2_fs_options mask, options; if (fs->fs_blocks > UINT32_MAX) { tcom_err(TUNEFS_ET_OPERATION_FAILED, "; cannot enable block32 journal feature on " "device \"%s\" having more that %u blocks", fs->fs_devname, UINT32_MAX); rc = 1; goto out; } memset(&mask, 0, sizeof(ocfs2_fs_options)); memset(&options, 0, sizeof(ocfs2_fs_options)); mask.opt_incompat |= JBD2_FEATURE_INCOMPAT_64BIT; if (!tools_interact("Enable block32 journal feature on device \"%s\" ?", fs->fs_devname)) goto out; tunefs_block_signals(); err = tunefs_set_journal_size(fs, 0, mask, options); tunefs_unblock_signals(); if (err) { rc = 1; tcom_err(err, "; unable to enable block32 journal feature on " "device \"%s\"", fs->fs_devname); } out: return rc; }
static errcode_t update_slot_count(ocfs2_filesys *fs, int num_slots) { errcode_t ret = 0; int orig_slots = OCFS2_RAW_SB(fs->fs_super)->s_max_slots; if (num_slots == orig_slots) { verbosef(VL_APP, "Device \"%s\" already has %d node slots; " "nothing to do\n", fs->fs_devname, num_slots); goto out; } if (!tools_interact("Change the number of node slots on device " "\"%s\" from %d to %d? ", fs->fs_devname, orig_slots, num_slots)) goto out; tunefs_block_signals(); if (num_slots > orig_slots) ret = add_slots(fs, num_slots); else ret = remove_slots(fs, num_slots); if (ret) goto out_unblock; OCFS2_RAW_SB(fs->fs_super)->s_max_slots = num_slots; if (num_slots > orig_slots) { /* Grow the new journals to match the first slot */ verbosef(VL_APP, "Allocating space for the new journals\n"); ret = tunefs_set_journal_size(fs, 0); if (!ret) verbosef(VL_APP, "Journal space allocated\n"); else { verbosef(VL_APP, "%s while trying to size the new journals\n", error_message(ret)); goto out_unblock; } } ret = ocfs2_format_slot_map(fs); if (ret) goto out_unblock; if (num_slots < orig_slots) { ret = tunefs_clear_in_progress(fs, OCFS2_TUNEFS_INPROG_REMOVE_SLOT); if (ret) goto out_unblock; } ret = ocfs2_write_super(fs); out_unblock: tunefs_unblock_signals(); out: return ret; }