Commit 215211de authored by Dave Kleikamp's avatar Dave Kleikamp

JFS: Support sharing of journal by multiple volumes

parent db8d295b
/* /*
* Copyright (c) International Business Machines Corp., 2000-2003 * Copyright (C) International Business Machines Corp., 2000-2004
* Portions Copyright (c) Christoph Hellwig, 2001-2002 * Portions Copyright (C) Christoph Hellwig, 2001-2002
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -133,12 +133,14 @@ enum cflags { ...@@ -133,12 +133,14 @@ enum cflags {
* JFS-private superblock information. * JFS-private superblock information.
*/ */
struct jfs_sb_info { struct jfs_sb_info {
struct super_block *sb; /* Point back to vfs super block */
unsigned long mntflag; /* aggregate attributes */ unsigned long mntflag; /* aggregate attributes */
struct inode *ipbmap; /* block map inode */ struct inode *ipbmap; /* block map inode */
struct inode *ipaimap; /* aggregate inode map inode */ struct inode *ipaimap; /* aggregate inode map inode */
struct inode *ipaimap2; /* secondary aimap inode */ struct inode *ipaimap2; /* secondary aimap inode */
struct inode *ipimap; /* aggregate inode map inode */ struct inode *ipimap; /* aggregate inode map inode */
struct jfs_log *log; /* log */ struct jfs_log *log; /* log */
struct list_head log_list; /* volumes associated with a journal */
short bsize; /* logical block size */ short bsize; /* logical block size */
short l2bsize; /* log2 logical block size */ short l2bsize; /* log2 logical block size */
short nbperpage; /* blocks per page */ short nbperpage; /* blocks per page */
......
This diff is collapsed.
/* /*
* Copyright (c) International Business Machines Corp., 2000-2003 * Copyright (C) International Business Machines Corp., 2000-2004
* Portions Copyright (c) Christoph Hellwig, 2001-2002 * Portions Copyright (C) Christoph Hellwig, 2001-2002
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -367,11 +367,10 @@ struct lvd { ...@@ -367,11 +367,10 @@ struct lvd {
*/ */
struct jfs_log { struct jfs_log {
struct super_block *sb; /* 4: This is used to sync metadata struct list_head sb_list;/* This is used to sync metadata
* before writing syncpt. Will * before writing syncpt.
* need to be a list if we share
* the log between fs's
*/ */
struct list_head journal_list; /* Global list */
struct block_device *bdev; /* 4: log lv pointer */ struct block_device *bdev; /* 4: log lv pointer */
s32 serial; /* 4: log mount serial number */ s32 serial; /* 4: log mount serial number */
...@@ -419,8 +418,6 @@ struct jfs_log { ...@@ -419,8 +418,6 @@ struct jfs_log {
char uuid[16]; /* 16: 128-bit uuid of log device */ char uuid[16]; /* 16: 128-bit uuid of log device */
int no_integrity; /* 3: flag to disable journaling to disk */ int no_integrity; /* 3: flag to disable journaling to disk */
int ni_page; /* 4: backup of page for nointegrity option */
int ni_eor; /* 4: backup of eor for nointegrity option */
}; };
/* /*
...@@ -506,8 +503,8 @@ struct logsyncblk { ...@@ -506,8 +503,8 @@ struct logsyncblk {
diff += (log)->logsize;\ diff += (log)->logsize;\
} }
extern int lmLogOpen(struct super_block *sb, struct jfs_log ** log); extern int lmLogOpen(struct super_block *sb);
extern int lmLogClose(struct super_block *sb, struct jfs_log * log); extern int lmLogClose(struct super_block *sb);
extern int lmLogSync(struct jfs_log * log, int nosyncwait); extern int lmLogSync(struct jfs_log * log, int nosyncwait);
extern int lmLogShutdown(struct jfs_log * log); extern int lmLogShutdown(struct jfs_log * log);
extern int lmLogInit(struct jfs_log * log); extern int lmLogInit(struct jfs_log * log);
......
/* /*
* Copyright (c) International Business Machines Corp., 2000-2003 * Copyright (C) International Business Machines Corp., 2000-2004
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -242,7 +242,6 @@ int jfs_mount(struct super_block *sb) ...@@ -242,7 +242,6 @@ int jfs_mount(struct super_block *sb)
int jfs_mount_rw(struct super_block *sb, int remount) int jfs_mount_rw(struct super_block *sb, int remount)
{ {
struct jfs_sb_info *sbi = JFS_SBI(sb); struct jfs_sb_info *sbi = JFS_SBI(sb);
struct jfs_log *log;
int rc; int rc;
/* /*
...@@ -272,18 +271,15 @@ int jfs_mount_rw(struct super_block *sb, int remount) ...@@ -272,18 +271,15 @@ int jfs_mount_rw(struct super_block *sb, int remount)
/* /*
* open/initialize log * open/initialize log
*/ */
if ((rc = lmLogOpen(sb, &log))) if ((rc = lmLogOpen(sb)))
return rc; return rc;
JFS_SBI(sb)->log = log;
/* /*
* update file system superblock; * update file system superblock;
*/ */
if ((rc = updateSuper(sb, FM_MOUNT))) { if ((rc = updateSuper(sb, FM_MOUNT))) {
jfs_err("jfs_mount: updateSuper failed w/rc = %d", rc); jfs_err("jfs_mount: updateSuper failed w/rc = %d", rc);
lmLogClose(sb, log); lmLogClose(sb);
JFS_SBI(sb)->log = 0;
return rc; return rc;
} }
......
/* /*
* Copyright (C) International Business Machines Corp., 2000-2003 * Copyright (C) International Business Machines Corp., 2000-2004
* Portions Copyright (C) Christoph Hellwig, 2001-2002 * Portions Copyright (C) Christoph Hellwig, 2001-2002
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -1354,7 +1354,7 @@ static int txLog(struct jfs_log * log, struct tblock * tblk, struct commit * cd) ...@@ -1354,7 +1354,7 @@ static int txLog(struct jfs_log * log, struct tblock * tblk, struct commit * cd)
/* initialize lrd common */ /* initialize lrd common */
ip = tlck->ip; ip = tlck->ip;
lrd->aggregate = cpu_to_le32(new_encode_dev(ip->i_sb->s_bdev->bd_dev)); lrd->aggregate = cpu_to_le32(JFS_SBI(ip->i_sb)->aggregate);
lrd->log.redopage.fileset = cpu_to_le32(JFS_IP(ip)->fileset); lrd->log.redopage.fileset = cpu_to_le32(JFS_IP(ip)->fileset);
lrd->log.redopage.inode = cpu_to_le32(ip->i_ino); lrd->log.redopage.inode = cpu_to_le32(ip->i_ino);
......
/* /*
* Copyright (c) International Business Machines Corp., 2000-2002 * Copyright (C) International Business Machines Corp., 2000-2004
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -128,7 +128,7 @@ int jfs_umount(struct super_block *sb) ...@@ -128,7 +128,7 @@ int jfs_umount(struct super_block *sb)
* *
* remove file system from log active file system list. * remove file system from log active file system list.
*/ */
rc = lmLogClose(sb, log); rc = lmLogClose(sb);
} }
jfs_info("UnMount JFS Complete: rc = %d", rc); jfs_info("UnMount JFS Complete: rc = %d", rc);
return rc; return rc;
...@@ -167,7 +167,6 @@ int jfs_umount_rw(struct super_block *sb) ...@@ -167,7 +167,6 @@ int jfs_umount_rw(struct super_block *sb)
filemap_fdatawait(bdev_mapping); filemap_fdatawait(bdev_mapping);
updateSuper(sb, FM_CLEAN); updateSuper(sb, FM_CLEAN);
sbi->log = NULL;
return lmLogClose(sb, log); return lmLogClose(sb);
} }
...@@ -381,6 +381,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -381,6 +381,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent)
return -ENOSPC; return -ENOSPC;
memset(sbi, 0, sizeof (struct jfs_sb_info)); memset(sbi, 0, sizeof (struct jfs_sb_info));
sb->s_fs_info = sbi; sb->s_fs_info = sbi;
sbi->sb = sb;
/* initialize the mount flag and determine the default error handler */ /* initialize the mount flag and determine the default error handler */
flag = JFS_ERR_REMOUNT_RO; flag = JFS_ERR_REMOUNT_RO;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment