123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- #ifndef _H_JFS_LOGMGR
- #define _H_JFS_LOGMGR
- #include "jfs_filsys.h"
- #include "jfs_lock.h"
- #define LOGPSIZE 4096
- #define L2LOGPSIZE 12
- #define LOGPAGES 16 /* Log pages per mounted file system */
- #define LOGSUPER_B 1
- #define LOGSTART_B 2
- #define LOGMAGIC 0x87654321
- #define LOGVERSION 1
- #define MAX_ACTIVE 128 /* Max active file systems sharing log */
- struct logsuper {
- __le32 magic;
- __le32 version;
- __le32 serial;
- __le32 size;
- __le32 bsize;
- __le32 l2bsize;
- __le32 flag;
- __le32 state;
- __le32 end;
- char uuid[16];
- char label[16];
- struct {
- char uuid[16];
- } active[MAX_ACTIVE];
- };
- #define NULL_UUID "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
- #define LOGMOUNT 0 /* log mounted by lmLogInit() */
- #define LOGREDONE 1 /* log shutdown by lmLogShutdown().
- * log redo completed by logredo().
- */
- #define LOGWRAP 2
- #define LOGREADERR 3
- struct logpage {
- struct {
- __le32 page;
- __le16 rsrvd;
- __le16 eor;
- } h;
- __le32 data[LOGPSIZE / 4 - 4];
- struct {
- __le32 page;
- __le16 rsrvd;
- __le16 eor;
- } t;
- };
- #define LOGPHDRSIZE 8 /* log page header size */
- #define LOGPTLRSIZE 8 /* log page trailer size */
- #define LOG_COMMIT 0x8000
- #define LOG_SYNCPT 0x4000
- #define LOG_MOUNT 0x2000
- #define LOG_REDOPAGE 0x0800
- #define LOG_NOREDOPAGE 0x0080
- #define LOG_NOREDOINOEXT 0x0040
- #define LOG_UPDATEMAP 0x0008
- #define LOG_NOREDOFILE 0x0001
- #define LOG_INODE 0x0001
- #define LOG_XTREE 0x0002
- #define LOG_DTREE 0x0004
- #define LOG_BTROOT 0x0010
- #define LOG_EA 0x0020
- #define LOG_ACL 0x0040
- #define LOG_DATA 0x0080
- #define LOG_NEW 0x0100
- #define LOG_EXTEND 0x0200
- #define LOG_RELOCATE 0x0400
- #define LOG_DIR_XTREE 0x0800 /* Xtree is in directory inode */
- #define LOG_ALLOCXADLIST 0x0080
- #define LOG_ALLOCPXDLIST 0x0040
- #define LOG_ALLOCXAD 0x0020
- #define LOG_ALLOCPXD 0x0010
- #define LOG_FREEXADLIST 0x0008
- #define LOG_FREEPXDLIST 0x0004
- #define LOG_FREEXAD 0x0002
- #define LOG_FREEPXD 0x0001
- struct lrd {
-
- __le32 logtid;
- __le32 backchain;
- __le16 type;
- __le16 length;
- __le32 aggregate;
-
-
- union {
-
-
- struct {
- __le32 fileset;
- __le32 inode;
- __le16 type;
- __le16 l2linesize;
- pxd_t pxd;
- } redopage;
-
- struct {
- __le32 fileset;
- __le32 inode;
- __le16 type;
- __le16 rsrvd;
- pxd_t pxd;
- } noredopage;
-
- struct {
- __le32 fileset;
- __le32 inode;
- __le16 type;
- __le16 nxd;
- pxd_t pxd;
- } updatemap;
-
- struct {
- __le32 fileset;
- __le32 iagnum;
- __le32 inoext_idx;
- pxd_t pxd;
- } noredoinoext;
-
- struct {
- __le32 sync;
- } syncpt;
-
-
- struct {
- __le32 type;
- __le32 nextent;
-
- } freextent;
-
- struct {
- __le32 fileset;
- __le32 inode;
- } noredofile;
-
- struct {
- __le32 fileset;
- __le32 inode;
- __le32 type;
- pxd_t pxd;
- } newpage;
-
- } log;
- };
- #define LOGRDSIZE (sizeof(struct lrd))
- struct lvd {
- __le16 offset;
- __le16 length;
- };
- struct jfs_log {
- struct list_head sb_list;
- struct list_head journal_list;
- struct block_device *bdev;
- int serial;
- s64 base;
- int size;
- int l2bsize;
- unsigned long flag;
- struct lbuf *lbuf_free;
- wait_queue_head_t free_wait;
-
- int logtid;
- int page;
- int eor;
- struct lbuf *bp;
- struct mutex loglock;
-
- int nextsync;
- int active;
- wait_queue_head_t syncwait;
-
- uint cflag;
- struct list_head cqueue;
- struct tblock *flush_tblk;
- int gcrtc;
- struct tblock *gclrt;
- spinlock_t gclock;
- int logsize;
- int lsn;
- int clsn;
- int syncpt;
- int sync;
- struct list_head synclist;
- spinlock_t synclock;
- struct lbuf *wqueue;
- int count;
- char uuid[16];
- int no_integrity;
- };
- #define log_INLINELOG 1
- #define log_SYNCBARRIER 2
- #define log_QUIESCE 3
- #define log_FLUSH 4
- #define logGC_PAGEOUT 0x00000001
- #define tblkGC_QUEUE 0x0001
- #define tblkGC_READY 0x0002
- #define tblkGC_COMMIT 0x0004
- #define tblkGC_COMMITTED 0x0008
- #define tblkGC_EOP 0x0010
- #define tblkGC_FREE 0x0020
- #define tblkGC_LEADER 0x0040
- #define tblkGC_ERROR 0x0080
- #define tblkGC_LAZY 0x0100 // D230860
- #define tblkGC_UNLOCKED 0x0200 // D230860
- struct lbuf {
- struct jfs_log *l_log;
-
- uint l_flag;
- struct lbuf *l_wqnext;
- struct lbuf *l_freelist;
- int l_pn;
- int l_eor;
- int l_ceor;
- s64 l_blkno;
- caddr_t l_ldata;
- struct page *l_page;
- uint l_offset;
- wait_queue_head_t l_ioevent;
- };
- #define l_redrive_next l_freelist
- struct logsyncblk {
- u16 xflag;
- u16 flag;
- lid_t lid;
- s32 lsn;
- struct list_head synclist;
- };
- #define LOGSYNC_LOCK_INIT(log) spin_lock_init(&(log)->synclock)
- #define LOGSYNC_LOCK(log, flags) spin_lock_irqsave(&(log)->synclock, flags)
- #define LOGSYNC_UNLOCK(log, flags) \
- spin_unlock_irqrestore(&(log)->synclock, flags)
- #define logdiff(diff, lsn, log)\
- {\
- diff = (lsn) - (log)->syncpt;\
- if (diff < 0)\
- diff += (log)->logsize;\
- }
- extern int lmLogOpen(struct super_block *sb);
- extern int lmLogClose(struct super_block *sb);
- extern int lmLogShutdown(struct jfs_log * log);
- extern int lmLogInit(struct jfs_log * log);
- extern int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize);
- extern int lmGroupCommit(struct jfs_log *, struct tblock *);
- extern int jfsIOWait(void *);
- extern void jfs_flush_journal(struct jfs_log * log, int wait);
- extern void jfs_syncpt(struct jfs_log *log, int hard_sync);
- #endif /* _H_JFS_LOGMGR */
|