From 4d0f22832cf02183e001ce9dd94787aaf2ff1ec9 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 23 Apr 2001 20:58:03 +0000 Subject: [PATCH] ChangeLog, tune2fs.c: tune2fs.c (remove_journal_device): If the force flag is given, tune2fs will remove the journal device information from the superblock even if tune2fs failed to open the journal device or otherwise other failed to remove the filesystem from journal device. (parse_tune2fs_options): Fix -j option so that it works (it was missing the open_flag being set to EXT2_FLAG_RW). (main): Accept "-U clear" to set a null UID. --- misc/ChangeLog | 11 +++++++++++ misc/tune2fs.c | 43 ++++++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/misc/ChangeLog b/misc/ChangeLog index 997cad21..216ae5ee 100644 --- a/misc/ChangeLog +++ b/misc/ChangeLog @@ -1,3 +1,14 @@ +2001-04-22 Theodore Tso + + * tune2fs.c (remove_journal_device): If the force flag is given, + tune2fs will remove the journal device information from + the superblock even if tune2fs failed to open the journal + device or otherwise other failed to remove the filesystem + from journal device. + (parse_tune2fs_options): Fix -j option so that it works + (it was missing the open_flag being set to EXT2_FLAG_RW). + (main): Accept "-U clear" to set a null UID. + 2001-04-21 Theodore Tso * mke2fs.8.in: Manual page cleanups. Temporarily comment out the diff --git a/misc/tune2fs.c b/misc/tune2fs.c index 096726d1..633030b6 100644 --- a/misc/tune2fs.c +++ b/misc/tune2fs.c @@ -1,12 +1,11 @@ /* - * tune2fs.c - Change the file system parameters on - * an unmounted second extended file system + * tune2fs.c - Change the file system parameters on an ext2 file system * * Copyright (C) 1992, 1993, 1994 Remy Card * Laboratoire MASI, Institut Blaise Pascal * Universite Pierre et Marie Curie (Paris VI) * - * Copyright 1995, 1996, 1997 by Theodore Ts'o. + * Copyright 1995, 1996, 1997, 1998, 1999, 2000 by Theodore Ts'o. * * %Begin-Header% * This file may be redistributed under the terms of the GNU Public @@ -57,7 +56,7 @@ extern int optind; const char * program_name = "tune2fs"; char * device_name; char * new_label, *new_last_mounted, *new_UUID; -static int c_flag, C_flag, e_flag, g_flag, i_flag, l_flag, L_flag; +static int c_flag, C_flag, e_flag, f_flag, g_flag, i_flag, l_flag, L_flag; static int m_flag, M_flag, r_flag, s_flag = -1, u_flag, U_flag; static int print_label; static int max_mount_count, mount_count, mount_flags; @@ -102,6 +101,10 @@ static void remove_journal_device(ext2_filsys fs) journal_superblock_t *jsb; int i, nr_users; errcode_t retval; + int commit_remove_journal = 0; + + if (f_flag) + commit_remove_journal = 1; /* force removal even if error */ journal_device = ext2fs_find_block_device(fs->super->s_journal_dev); if (!journal_device) @@ -113,26 +116,26 @@ static void remove_journal_device(ext2_filsys fs) if (retval) { com_err(program_name, retval, _("while trying to open external journal")); - exit(1); + goto no_valid_journal; } if (!(jfs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) { fprintf(stderr, "%s is not a journal device.\n", journal_device); - exit(1); + goto no_valid_journal; } /* Get the journal superblock */ if ((retval = io_channel_read_blk(jfs->io, 1, -1024, buf))) { com_err(program_name, retval, _("while reading journal superblock")); - exit(1); + goto no_valid_journal; } jsb = (journal_superblock_t *) buf; if ((jsb->s_header.h_magic != (unsigned) ntohl(JFS_MAGIC_NUMBER)) || (jsb->s_header.h_blocktype != (unsigned) ntohl(JFS_SUPERBLOCK_V2))) { fprintf(stderr, _("Journal superblock not found!\n")); - exit(1); + goto no_valid_journal; } /* Find the filesystem UUID */ @@ -144,7 +147,8 @@ static void remove_journal_device(ext2_filsys fs) } if (i >= nr_users) { fprintf(stderr, "Filesystem's UUID not found on journal device.\n"); - exit(1); + commit_remove_journal = 1; + goto no_valid_journal; } nr_users--; for (i=0; i < nr_users; i++) @@ -155,13 +159,21 @@ static void remove_journal_device(ext2_filsys fs) if ((retval = io_channel_write_blk(jfs->io, 1, -1024, buf))) { com_err(program_name, retval, "while writing journal superblock."); - exit(1); + goto no_valid_journal; } + commit_remove_journal = 1; + +no_valid_journal: + if (commit_remove_journal == 0) { + printf(_("Journal NOT removed\n")); + exit(1); + } fs->super->s_journal_dev = 0; memset(fs->super->s_journal_uuid, 0, sizeof(fs->super->s_journal_uuid)); ext2fs_mark_super_dirty(fs); + printf(_("Journal removed\n")); } @@ -228,7 +240,7 @@ static void update_feature_set(ext2_filsys fs, char *features) &inode); if (retval) { com_err(program_name, retval, - "while write journal inode"); + "while writing journal inode"); exit(1); } } @@ -364,7 +376,7 @@ static void parse_tune2fs_options(int argc, char **argv) fprintf (stderr, _("tune2fs %s, %s for EXT2 FS %s, %s\n"), E2FSPROGS_VERSION, E2FSPROGS_DATE, EXT2FS_VERSION, EXT2FS_DATE); - while ((c = getopt (argc, argv, "c:e:g:i:jlm:r:s:u:C:J:L:M:O:U:")) != EOF) + while ((c = getopt (argc, argv, "c:e:fg:i:jlm:r:s:u:C:J:L:M:O:U:")) != EOF) switch (c) { case 'c': @@ -405,6 +417,9 @@ static void parse_tune2fs_options(int argc, char **argv) e_flag = 1; open_flag = EXT2_FLAG_RW; break; + case 'f': /* Force */ + f_flag = 1; + break; case 'g': resgid = strtoul (optarg, &tmp, 0); if (*tmp) { @@ -460,6 +475,7 @@ static void parse_tune2fs_options(int argc, char **argv) case 'j': if (!journal_size) journal_size = -1; + open_flag = EXT2_FLAG_RW; break; case 'J': parse_journal_opts(optarg); @@ -690,7 +706,8 @@ int main (int argc, char ** argv) add_journal(fs); if (U_flag) { - if (strcasecmp(new_UUID, "null") == 0) { + if ((strcasecmp(new_UUID, "null") == 0) || + (strcasecmp(new_UUID, "clear") == 0)) { uuid_clear(sb->s_uuid); } else if (strcasecmp(new_UUID, "time") == 0) { uuid_generate_time(sb->s_uuid);