⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 super.c

📁 在Linux内核从2.4升级到2.6时需要升级的软件包
💻 C
字号:
/* *   Copyright (c) International Business Machines Corp., 2000-2002 * *   This program is free software;  you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY;  without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See *   the GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program;  if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include <config.h>#include <string.h>#include <stdio.h>/* JFS includes	*/#include "jfs_filsys.h"#include "jfs_superblock.h"#include "jfs_logmgr.h"/*-------------------------------------------------------------------- * NAME: build_flag_string * * FUNCTION: build a string of text descriptions of *           the set flags in the superblock * * PARAMETERS: *      flags       - flags field from the superblock *      flag_string - returned string of flag descriptions */void build_flag_string(uint32_t flags, char *flag_string){	char *string_ptr = flag_string;	if (flags & JFS_LINUX) {		strcpy(string_ptr, "JFS_LINUX  ");		string_ptr += 11;	}	if (flags & JFS_OS2) {		strcpy(string_ptr, "JFS_OS2  ");		string_ptr += 9;	}	if (flags & JFS_COMMIT) {		strcpy(string_ptr, "JFS_COMMIT  ");		string_ptr += 12;	}	if (flags & JFS_GROUPCOMMIT) {		strcpy(string_ptr, "JFS_GROUPCOMMIT  ");		string_ptr += 17;	}	if (flags & JFS_LAZYCOMMIT) {		strcpy(string_ptr, "JFS_LAZYCOMMIT  ");		string_ptr += 16;	}	if (flags & JFS_INLINELOG) {		strcpy(string_ptr, "JFS_INLINELOG  ");		string_ptr += 15;	}	if (flags & JFS_BAD_SAIT) {		strcpy(string_ptr, "JFS_BAD_SAIT  ");		string_ptr += 14;	}	if (flags & JFS_SPARSE) {		strcpy(string_ptr, "JFS_SPARSE  ");		string_ptr += 12;	}	if (flags & JFS_DASD_ENABLED) {		strcpy(string_ptr, "JFS_DASD_ENABLED  ");		string_ptr += 18;	}	if (flags & JFS_DASD_PRIME) {		strcpy(string_ptr, "JFS_DASD_PRIME  ");		string_ptr += 16;	}	strcpy(string_ptr, "\0");	return;}/*-------------------------------------------------------------------- * NAME: display_super * * FUNCTION: display the JFS file system superblock * * PARAMETERS: *      sb  - pointer to the file system superblock * * SAMPLE OUTPUT: JFS magic number:	'JFS1' JFS version:		2 JFS state:		clean JFS flags:		JFS_LINUX  JFS_COMMIT  JFS_GROUPCOMMIT Aggregate block size:	4096 bytes Aggregate size:	2055784 blocks Physical block size:	512 bytes Allocation group size:	8192 aggregate blocks Log device number:	0x3f06 Filesystem creation:	Fri Aug  2 14:48:53 2002 File system UUID:	7940a3b8-0bb0-4c0d-a389-630619783c6e Volume label:		'                ' External log UUID:	47c80a1d-7f25-4c61-9596-f33e463e5b38 */void display_super(struct superblock *sb){	char *state;	char uuid_unparsed[37];	char flag_string[142];	time_t tm;	switch (sb->s_state) {	case FM_CLEAN:		state = "clean";		break;	case FM_MOUNT:		state = "mounted";		break;	case FM_DIRTY:		state = "dirty";		break;	case FM_LOGREDO:		state = "logredo";		break;	default:		state = "unknown";		break;	}	build_flag_string(sb->s_flag, flag_string);	printf("\nJFS filesystem superblock:\n\n");	printf("JFS magic number:\t'%4.4s'\n", sb->s_magic);	printf("JFS version:\t\t%d\n", sb->s_version);	printf("JFS state:\t\t%s\n", state);	printf("JFS flags:\t\t%s\n", flag_string);	printf("Aggregate block size:\t%d bytes\n", sb->s_bsize);	printf("Aggregate size:\t\t%lld blocks\n", (long long) sb->s_size);	printf("Physical block size:\t%d bytes\n", sb->s_pbsize);	printf("Allocation group size:\t%d aggregate blocks\n", sb->s_agsize);	printf("Log device number:\t0x%x\n", sb->s_logdev);	tm = sb->s_time.tv_sec;	printf("Filesystem creation:\t%s", ctime(&tm));	/*	 * JFS version 2 incorporated new fields for	 * UUID, log UUID, and a 16 char volume label	 * into the superblock.  Account for those here.	 */	if (sb->s_version == JFS_VERSION) {		uuid_unparse(sb->s_uuid, uuid_unparsed);		printf("File system UUID:\t%s\n", uuid_unparsed);		printf("Volume label:\t\t'%.16s'\n", sb->s_label);		uuid_unparse(sb->s_loguuid, uuid_unparsed);		printf("External log UUID:\t%s\n", uuid_unparsed);	} else {		printf("Volume label:\t\t'%.11s'\n", sb->s_fpack);	}	printf("\n");	return;}/*-------------------------------------------------------------------- * NAME: display_logsuper * * FUNCTION: display the JFS log superblock * * PARAMETERS: *      lsp  - pointer to the log superblock * * SAMPLE OUTPUT: JFS log magic number:  0x87654321 JFS log version:	1 Log opened/mounted:	3 Logical block size:	4096 bytes Log size:		32768 blocks Log flags:		JFS_LINUX  JFS_COMMIT  JFS_GROUPCOMMIT Log state:		LOGMOUNT Log device UUID:	47c80a1d-7f25-4c61-9596-f33e463e5b38 Log volume label:	'       JFSLogVol' Active file systems:     active[0]:  7940a3b8-0bb0-4c0d-a389-630619783c6e */void display_logsuper(struct logsuper * lsp){	char *state;	char uuid_unparsed[37];	int i;	bool active_fs = false;	char flag_string[142];	switch (lsp->state) {	case LOGMOUNT:		state = "LOGMOUNT";		break;	case LOGREDONE:		state = "LOGREDONE";		break;	case LOGWRAP:		state = "LOGWRAP";		break;	case LOGREADERR:		state = "LOGREADERR";		break;	default:		state = "Unknown";		break;	}	build_flag_string(lsp->flag, flag_string);	printf("\nJFS external log superblock:\n\n");	printf("JFS log magic number:\t0x%x\n", lsp->magic);	printf("JFS log version:\t%d\n", lsp->version);	printf("Log opened/mounted:\t%d\n", lsp->serial);	printf("Logical block size:\t%d bytes\n", lsp->bsize);	printf("Log size:\t\t%d blocks\n", lsp->size);	printf("Log flags:\t\t%s\n", flag_string);	printf("Log state:\t\t%s\n", state);	uuid_unparse(lsp->uuid, uuid_unparsed);	printf("Log device UUID:\t%s\n", uuid_unparsed);	printf("Log volume label:\t'%16s'\n", lsp->label);	printf("Active file systems:");	for (i = 0; i < MAX_ACTIVE; i++) {		uuid_unparse(lsp->active[i], uuid_unparsed);		/* only print active (non-zero uuid) file systems */		if (strncmp(uuid_unparsed, "00000000-0000-0000-0000-000000000000", 36)) {			printf("\n    active[%d]:  %s", i, uuid_unparsed);			active_fs = true;		}	}	if (!active_fs) {		printf("\tNone active.\n");	}	printf("\n");	return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -