You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6: JFS: Update print_hex_dump() syntax JFS: use print_hex_dump() rather than private dump_mem() function JFS: Whitespace cleanup and remove some dead code
This commit is contained in:
+1
-1
@@ -29,7 +29,7 @@
|
||||
__u32 __x = (x); \
|
||||
((__u32)( \
|
||||
((__x & (__u32)0x000000ffUL) << 16) | \
|
||||
(__x & (__u32)0x0000ff00UL) | \
|
||||
(__x & (__u32)0x0000ff00UL) | \
|
||||
((__x & (__u32)0x00ff0000UL) >> 16) )); \
|
||||
})
|
||||
|
||||
|
||||
@@ -26,34 +26,6 @@
|
||||
#include "jfs_filsys.h"
|
||||
#include "jfs_debug.h"
|
||||
|
||||
#ifdef CONFIG_JFS_DEBUG
|
||||
void dump_mem(char *label, void *data, int length)
|
||||
{
|
||||
int i, j;
|
||||
int *intptr = data;
|
||||
char *charptr = data;
|
||||
char buf[10], line[80];
|
||||
|
||||
printk("%s: dump of %d bytes of data at 0x%p\n\n", label, length,
|
||||
data);
|
||||
for (i = 0; i < length; i += 16) {
|
||||
line[0] = 0;
|
||||
for (j = 0; (j < 4) && (i + j * 4 < length); j++) {
|
||||
sprintf(buf, " %08x", intptr[i / 4 + j]);
|
||||
strcat(line, buf);
|
||||
}
|
||||
buf[0] = ' ';
|
||||
buf[2] = 0;
|
||||
for (j = 0; (j < 16) && (i + j < length); j++) {
|
||||
buf[1] =
|
||||
isprint(charptr[i + j]) ? charptr[i + j] : '.';
|
||||
strcat(line, buf);
|
||||
}
|
||||
printk("%s\n", line);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PROC_FS_JFS /* see jfs_debug.h */
|
||||
|
||||
static struct proc_dir_entry *base;
|
||||
|
||||
@@ -62,7 +62,6 @@ extern void jfs_proc_clean(void);
|
||||
|
||||
extern int jfsloglevel;
|
||||
|
||||
extern void dump_mem(char *label, void *data, int length);
|
||||
extern int jfs_txanchor_read(char *, char **, off_t, int, int *, void *);
|
||||
|
||||
/* information message: e.g., configuration, major event */
|
||||
@@ -94,7 +93,6 @@ extern int jfs_txanchor_read(char *, char **, off_t, int, int *, void *);
|
||||
* ---------
|
||||
*/
|
||||
#else /* CONFIG_JFS_DEBUG */
|
||||
#define dump_mem(label,data,length) do {} while (0)
|
||||
#define ASSERT(p) do {} while (0)
|
||||
#define jfs_info(fmt, arg...) do {} while (0)
|
||||
#define jfs_debug(fmt, arg...) do {} while (0)
|
||||
|
||||
+21
-21
@@ -19,23 +19,23 @@
|
||||
#define _H_JFS_DINODE
|
||||
|
||||
/*
|
||||
* jfs_dinode.h: on-disk inode manager
|
||||
* jfs_dinode.h: on-disk inode manager
|
||||
*/
|
||||
|
||||
#define INODESLOTSIZE 128
|
||||
#define L2INODESLOTSIZE 7
|
||||
#define log2INODESIZE 9 /* log2(bytes per dinode) */
|
||||
#define INODESLOTSIZE 128
|
||||
#define L2INODESLOTSIZE 7
|
||||
#define log2INODESIZE 9 /* log2(bytes per dinode) */
|
||||
|
||||
|
||||
/*
|
||||
* on-disk inode : 512 bytes
|
||||
* on-disk inode : 512 bytes
|
||||
*
|
||||
* note: align 64-bit fields on 8-byte boundary.
|
||||
*/
|
||||
struct dinode {
|
||||
/*
|
||||
* I. base area (128 bytes)
|
||||
* ------------------------
|
||||
* I. base area (128 bytes)
|
||||
* ------------------------
|
||||
*
|
||||
* define generic/POSIX attributes
|
||||
*/
|
||||
@@ -70,16 +70,16 @@ struct dinode {
|
||||
__le32 di_acltype; /* 4: Type of ACL */
|
||||
|
||||
/*
|
||||
* Extension Areas.
|
||||
* Extension Areas.
|
||||
*
|
||||
* Historically, the inode was partitioned into 4 128-byte areas,
|
||||
* the last 3 being defined as unions which could have multiple
|
||||
* uses. The first 96 bytes had been completely unused until
|
||||
* an index table was added to the directory. It is now more
|
||||
* useful to describe the last 3/4 of the inode as a single
|
||||
* union. We would probably be better off redesigning the
|
||||
* entire structure from scratch, but we don't want to break
|
||||
* commonality with OS/2's JFS at this time.
|
||||
* Historically, the inode was partitioned into 4 128-byte areas,
|
||||
* the last 3 being defined as unions which could have multiple
|
||||
* uses. The first 96 bytes had been completely unused until
|
||||
* an index table was added to the directory. It is now more
|
||||
* useful to describe the last 3/4 of the inode as a single
|
||||
* union. We would probably be better off redesigning the
|
||||
* entire structure from scratch, but we don't want to break
|
||||
* commonality with OS/2's JFS at this time.
|
||||
*/
|
||||
union {
|
||||
struct {
|
||||
@@ -95,7 +95,7 @@ struct dinode {
|
||||
} _dir; /* (384) */
|
||||
#define di_dirtable u._dir._table
|
||||
#define di_dtroot u._dir._dtroot
|
||||
#define di_parent di_dtroot.header.idotdot
|
||||
#define di_parent di_dtroot.header.idotdot
|
||||
#define di_DASD di_dtroot.header.DASD
|
||||
|
||||
struct {
|
||||
@@ -127,14 +127,14 @@ struct dinode {
|
||||
#define di_inlinedata u._file._u2._special._u
|
||||
#define di_rdev u._file._u2._special._u._rdev
|
||||
#define di_fastsymlink u._file._u2._special._u._fastsymlink
|
||||
#define di_inlineea u._file._u2._special._inlineea
|
||||
#define di_inlineea u._file._u2._special._inlineea
|
||||
} u;
|
||||
};
|
||||
|
||||
/* extended mode bits (on-disk inode di_mode) */
|
||||
#define IFJOURNAL 0x00010000 /* journalled file */
|
||||
#define ISPARSE 0x00020000 /* sparse file enabled */
|
||||
#define INLINEEA 0x00040000 /* inline EA area free */
|
||||
#define IFJOURNAL 0x00010000 /* journalled file */
|
||||
#define ISPARSE 0x00020000 /* sparse file enabled */
|
||||
#define INLINEEA 0x00040000 /* inline EA area free */
|
||||
#define ISWAPFILE 0x00800000 /* file open for pager swap space */
|
||||
|
||||
/* more extended mode bits: attributes for OS/2 */
|
||||
|
||||
+206
-213
File diff suppressed because it is too large
Load Diff
+59
-59
@@ -83,7 +83,7 @@ static __inline signed char TREEMAX(signed char *cp)
|
||||
* - 1 is added to account for the control page of the map.
|
||||
*/
|
||||
#define BLKTODMAP(b,s) \
|
||||
((((b) >> 13) + ((b) >> 23) + ((b) >> 33) + 3 + 1) << (s))
|
||||
((((b) >> 13) + ((b) >> 23) + ((b) >> 33) + 3 + 1) << (s))
|
||||
|
||||
/*
|
||||
* convert disk block number to the logical block number of the LEVEL 0
|
||||
@@ -98,7 +98,7 @@ static __inline signed char TREEMAX(signed char *cp)
|
||||
* - 1 is added to account for the control page of the map.
|
||||
*/
|
||||
#define BLKTOL0(b,s) \
|
||||
(((((b) >> 23) << 10) + ((b) >> 23) + ((b) >> 33) + 2 + 1) << (s))
|
||||
(((((b) >> 23) << 10) + ((b) >> 23) + ((b) >> 33) + 2 + 1) << (s))
|
||||
|
||||
/*
|
||||
* convert disk block number to the logical block number of the LEVEL 1
|
||||
@@ -120,7 +120,7 @@ static __inline signed char TREEMAX(signed char *cp)
|
||||
* at the specified level which describes the disk block.
|
||||
*/
|
||||
#define BLKTOCTL(b,s,l) \
|
||||
(((l) == 2) ? 1 : ((l) == 1) ? BLKTOL1((b),(s)) : BLKTOL0((b),(s)))
|
||||
(((l) == 2) ? 1 : ((l) == 1) ? BLKTOL1((b),(s)) : BLKTOL0((b),(s)))
|
||||
|
||||
/*
|
||||
* convert aggregate map size to the zero origin dmapctl level of the
|
||||
@@ -145,27 +145,27 @@ static __inline signed char TREEMAX(signed char *cp)
|
||||
* dmaptree must be consistent with dmapctl.
|
||||
*/
|
||||
struct dmaptree {
|
||||
__le32 nleafs; /* 4: number of tree leafs */
|
||||
__le32 l2nleafs; /* 4: l2 number of tree leafs */
|
||||
__le32 leafidx; /* 4: index of first tree leaf */
|
||||
__le32 height; /* 4: height of the tree */
|
||||
__le32 nleafs; /* 4: number of tree leafs */
|
||||
__le32 l2nleafs; /* 4: l2 number of tree leafs */
|
||||
__le32 leafidx; /* 4: index of first tree leaf */
|
||||
__le32 height; /* 4: height of the tree */
|
||||
s8 budmin; /* 1: min l2 tree leaf value to combine */
|
||||
s8 stree[TREESIZE]; /* TREESIZE: tree */
|
||||
u8 pad[2]; /* 2: pad to word boundary */
|
||||
}; /* - 360 - */
|
||||
s8 stree[TREESIZE]; /* TREESIZE: tree */
|
||||
u8 pad[2]; /* 2: pad to word boundary */
|
||||
}; /* - 360 - */
|
||||
|
||||
/*
|
||||
* dmap page per 8K blocks bitmap
|
||||
*/
|
||||
struct dmap {
|
||||
__le32 nblocks; /* 4: num blks covered by this dmap */
|
||||
__le32 nfree; /* 4: num of free blks in this dmap */
|
||||
__le64 start; /* 8: starting blkno for this dmap */
|
||||
struct dmaptree tree; /* 360: dmap tree */
|
||||
u8 pad[1672]; /* 1672: pad to 2048 bytes */
|
||||
__le32 wmap[LPERDMAP]; /* 1024: bits of the working map */
|
||||
__le32 pmap[LPERDMAP]; /* 1024: bits of the persistent map */
|
||||
}; /* - 4096 - */
|
||||
__le32 nblocks; /* 4: num blks covered by this dmap */
|
||||
__le32 nfree; /* 4: num of free blks in this dmap */
|
||||
__le64 start; /* 8: starting blkno for this dmap */
|
||||
struct dmaptree tree; /* 360: dmap tree */
|
||||
u8 pad[1672]; /* 1672: pad to 2048 bytes */
|
||||
__le32 wmap[LPERDMAP]; /* 1024: bits of the working map */
|
||||
__le32 pmap[LPERDMAP]; /* 1024: bits of the persistent map */
|
||||
}; /* - 4096 - */
|
||||
|
||||
/*
|
||||
* disk map control page per level.
|
||||
@@ -173,14 +173,14 @@ struct dmap {
|
||||
* dmapctl must be consistent with dmaptree.
|
||||
*/
|
||||
struct dmapctl {
|
||||
__le32 nleafs; /* 4: number of tree leafs */
|
||||
__le32 l2nleafs; /* 4: l2 number of tree leafs */
|
||||
__le32 leafidx; /* 4: index of the first tree leaf */
|
||||
__le32 height; /* 4: height of tree */
|
||||
s8 budmin; /* 1: minimum l2 tree leaf value */
|
||||
s8 stree[CTLTREESIZE]; /* CTLTREESIZE: dmapctl tree */
|
||||
u8 pad[2714]; /* 2714: pad to 4096 */
|
||||
}; /* - 4096 - */
|
||||
__le32 nleafs; /* 4: number of tree leafs */
|
||||
__le32 l2nleafs; /* 4: l2 number of tree leafs */
|
||||
__le32 leafidx; /* 4: index of the first tree leaf */
|
||||
__le32 height; /* 4: height of tree */
|
||||
s8 budmin; /* 1: minimum l2 tree leaf value */
|
||||
s8 stree[CTLTREESIZE]; /* CTLTREESIZE: dmapctl tree */
|
||||
u8 pad[2714]; /* 2714: pad to 4096 */
|
||||
}; /* - 4096 - */
|
||||
|
||||
/*
|
||||
* common definition for dmaptree within dmap and dmapctl
|
||||
@@ -202,41 +202,41 @@ typedef union dmtree {
|
||||
* on-disk aggregate disk allocation map descriptor.
|
||||
*/
|
||||
struct dbmap_disk {
|
||||
__le64 dn_mapsize; /* 8: number of blocks in aggregate */
|
||||
__le64 dn_nfree; /* 8: num free blks in aggregate map */
|
||||
__le32 dn_l2nbperpage; /* 4: number of blks per page */
|
||||
__le32 dn_numag; /* 4: total number of ags */
|
||||
__le32 dn_maxlevel; /* 4: number of active ags */
|
||||
__le32 dn_maxag; /* 4: max active alloc group number */
|
||||
__le32 dn_agpref; /* 4: preferred alloc group (hint) */
|
||||
__le32 dn_aglevel; /* 4: dmapctl level holding the AG */
|
||||
__le32 dn_agheigth; /* 4: height in dmapctl of the AG */
|
||||
__le32 dn_agwidth; /* 4: width in dmapctl of the AG */
|
||||
__le32 dn_agstart; /* 4: start tree index at AG height */
|
||||
__le32 dn_agl2size; /* 4: l2 num of blks per alloc group */
|
||||
__le64 dn_agfree[MAXAG];/* 8*MAXAG: per AG free count */
|
||||
__le64 dn_agsize; /* 8: num of blks per alloc group */
|
||||
s8 dn_maxfreebud; /* 1: max free buddy system */
|
||||
u8 pad[3007]; /* 3007: pad to 4096 */
|
||||
}; /* - 4096 - */
|
||||
__le64 dn_mapsize; /* 8: number of blocks in aggregate */
|
||||
__le64 dn_nfree; /* 8: num free blks in aggregate map */
|
||||
__le32 dn_l2nbperpage; /* 4: number of blks per page */
|
||||
__le32 dn_numag; /* 4: total number of ags */
|
||||
__le32 dn_maxlevel; /* 4: number of active ags */
|
||||
__le32 dn_maxag; /* 4: max active alloc group number */
|
||||
__le32 dn_agpref; /* 4: preferred alloc group (hint) */
|
||||
__le32 dn_aglevel; /* 4: dmapctl level holding the AG */
|
||||
__le32 dn_agheigth; /* 4: height in dmapctl of the AG */
|
||||
__le32 dn_agwidth; /* 4: width in dmapctl of the AG */
|
||||
__le32 dn_agstart; /* 4: start tree index at AG height */
|
||||
__le32 dn_agl2size; /* 4: l2 num of blks per alloc group */
|
||||
__le64 dn_agfree[MAXAG];/* 8*MAXAG: per AG free count */
|
||||
__le64 dn_agsize; /* 8: num of blks per alloc group */
|
||||
s8 dn_maxfreebud; /* 1: max free buddy system */
|
||||
u8 pad[3007]; /* 3007: pad to 4096 */
|
||||
}; /* - 4096 - */
|
||||
|
||||
struct dbmap {
|
||||
s64 dn_mapsize; /* number of blocks in aggregate */
|
||||
s64 dn_nfree; /* num free blks in aggregate map */
|
||||
int dn_l2nbperpage; /* number of blks per page */
|
||||
int dn_numag; /* total number of ags */
|
||||
int dn_maxlevel; /* number of active ags */
|
||||
int dn_maxag; /* max active alloc group number */
|
||||
int dn_agpref; /* preferred alloc group (hint) */
|
||||
int dn_aglevel; /* dmapctl level holding the AG */
|
||||
int dn_agheigth; /* height in dmapctl of the AG */
|
||||
int dn_agwidth; /* width in dmapctl of the AG */
|
||||
int dn_agstart; /* start tree index at AG height */
|
||||
int dn_agl2size; /* l2 num of blks per alloc group */
|
||||
s64 dn_agfree[MAXAG]; /* per AG free count */
|
||||
s64 dn_agsize; /* num of blks per alloc group */
|
||||
signed char dn_maxfreebud; /* max free buddy system */
|
||||
}; /* - 4096 - */
|
||||
s64 dn_mapsize; /* number of blocks in aggregate */
|
||||
s64 dn_nfree; /* num free blks in aggregate map */
|
||||
int dn_l2nbperpage; /* number of blks per page */
|
||||
int dn_numag; /* total number of ags */
|
||||
int dn_maxlevel; /* number of active ags */
|
||||
int dn_maxag; /* max active alloc group number */
|
||||
int dn_agpref; /* preferred alloc group (hint) */
|
||||
int dn_aglevel; /* dmapctl level holding the AG */
|
||||
int dn_agheigth; /* height in dmapctl of the AG */
|
||||
int dn_agwidth; /* width in dmapctl of the AG */
|
||||
int dn_agstart; /* start tree index at AG height */
|
||||
int dn_agl2size; /* l2 num of blks per alloc group */
|
||||
s64 dn_agfree[MAXAG]; /* per AG free count */
|
||||
s64 dn_agsize; /* num of blks per alloc group */
|
||||
signed char dn_maxfreebud; /* max free buddy system */
|
||||
}; /* - 4096 - */
|
||||
/*
|
||||
* in-memory aggregate disk allocation map descriptor.
|
||||
*/
|
||||
|
||||
+50
-55
@@ -315,8 +315,8 @@ static inline void lock_index(tid_t tid, struct inode *ip, struct metapage * mp,
|
||||
lv = &llck->lv[llck->index];
|
||||
|
||||
/*
|
||||
* Linelock slot size is twice the size of directory table
|
||||
* slot size. 512 entries per page.
|
||||
* Linelock slot size is twice the size of directory table
|
||||
* slot size. 512 entries per page.
|
||||
*/
|
||||
lv->offset = ((index - 2) & 511) >> 1;
|
||||
lv->length = 1;
|
||||
@@ -615,7 +615,7 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
|
||||
btstack->nsplit = 1;
|
||||
|
||||
/*
|
||||
* search down tree from root:
|
||||
* search down tree from root:
|
||||
*
|
||||
* between two consecutive entries of <Ki, Pi> and <Kj, Pj> of
|
||||
* internal page, child page Pi contains entry with k, Ki <= K < Kj.
|
||||
@@ -659,7 +659,7 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
|
||||
}
|
||||
if (cmp == 0) {
|
||||
/*
|
||||
* search hit
|
||||
* search hit
|
||||
*/
|
||||
/* search hit - leaf page:
|
||||
* return the entry found
|
||||
@@ -723,7 +723,7 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
|
||||
}
|
||||
|
||||
/*
|
||||
* search miss
|
||||
* search miss
|
||||
*
|
||||
* base is the smallest index with key (Kj) greater than
|
||||
* search key (K) and may be zero or (maxindex + 1) index.
|
||||
@@ -834,7 +834,7 @@ int dtInsert(tid_t tid, struct inode *ip,
|
||||
struct lv *lv;
|
||||
|
||||
/*
|
||||
* retrieve search result
|
||||
* retrieve search result
|
||||
*
|
||||
* dtSearch() returns (leaf page pinned, index at which to insert).
|
||||
* n.b. dtSearch() may return index of (maxindex + 1) of
|
||||
@@ -843,7 +843,7 @@ int dtInsert(tid_t tid, struct inode *ip,
|
||||
DT_GETSEARCH(ip, btstack->top, bn, mp, p, index);
|
||||
|
||||
/*
|
||||
* insert entry for new key
|
||||
* insert entry for new key
|
||||
*/
|
||||
if (DO_INDEX(ip)) {
|
||||
if (JFS_IP(ip)->next_index == DIREND) {
|
||||
@@ -860,9 +860,9 @@ int dtInsert(tid_t tid, struct inode *ip,
|
||||
data.leaf.ino = *fsn;
|
||||
|
||||
/*
|
||||
* leaf page does not have enough room for new entry:
|
||||
* leaf page does not have enough room for new entry:
|
||||
*
|
||||
* extend/split the leaf page;
|
||||
* extend/split the leaf page;
|
||||
*
|
||||
* dtSplitUp() will insert the entry and unpin the leaf page.
|
||||
*/
|
||||
@@ -877,9 +877,9 @@ int dtInsert(tid_t tid, struct inode *ip,
|
||||
}
|
||||
|
||||
/*
|
||||
* leaf page does have enough room for new entry:
|
||||
* leaf page does have enough room for new entry:
|
||||
*
|
||||
* insert the new data entry into the leaf page;
|
||||
* insert the new data entry into the leaf page;
|
||||
*/
|
||||
BT_MARK_DIRTY(mp, ip);
|
||||
/*
|
||||
@@ -967,13 +967,13 @@ static int dtSplitUp(tid_t tid,
|
||||
}
|
||||
|
||||
/*
|
||||
* split leaf page
|
||||
* split leaf page
|
||||
*
|
||||
* The split routines insert the new entry, and
|
||||
* acquire txLock as appropriate.
|
||||
*/
|
||||
/*
|
||||
* split root leaf page:
|
||||
* split root leaf page:
|
||||
*/
|
||||
if (sp->header.flag & BT_ROOT) {
|
||||
/*
|
||||
@@ -1012,7 +1012,7 @@ static int dtSplitUp(tid_t tid,
|
||||
}
|
||||
|
||||
/*
|
||||
* extend first leaf page
|
||||
* extend first leaf page
|
||||
*
|
||||
* extend the 1st extent if less than buffer page size
|
||||
* (dtExtendPage() reurns leaf page unpinned)
|
||||
@@ -1068,7 +1068,7 @@ static int dtSplitUp(tid_t tid,
|
||||
}
|
||||
|
||||
/*
|
||||
* split leaf page <sp> into <sp> and a new right page <rp>.
|
||||
* split leaf page <sp> into <sp> and a new right page <rp>.
|
||||
*
|
||||
* return <rp> pinned and its extent descriptor <rpxd>
|
||||
*/
|
||||
@@ -1433,7 +1433,7 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
|
||||
rp->header.freecnt = rp->header.maxslot - fsi;
|
||||
|
||||
/*
|
||||
* sequential append at tail: append without split
|
||||
* sequential append at tail: append without split
|
||||
*
|
||||
* If splitting the last page on a level because of appending
|
||||
* a entry to it (skip is maxentry), it's likely that the access is
|
||||
@@ -1467,7 +1467,7 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
|
||||
}
|
||||
|
||||
/*
|
||||
* non-sequential insert (at possibly middle page)
|
||||
* non-sequential insert (at possibly middle page)
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -1508,7 +1508,7 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
|
||||
left = 0;
|
||||
|
||||
/*
|
||||
* compute fill factor for split pages
|
||||
* compute fill factor for split pages
|
||||
*
|
||||
* <nxt> traces the next entry to move to rp
|
||||
* <off> traces the next entry to stay in sp
|
||||
@@ -1551,7 +1551,7 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
|
||||
/* <nxt> poins to the 1st entry to move */
|
||||
|
||||
/*
|
||||
* move entries to right page
|
||||
* move entries to right page
|
||||
*
|
||||
* dtMoveEntry() initializes rp and reserves entry for insertion
|
||||
*
|
||||
@@ -1677,7 +1677,7 @@ static int dtExtendPage(tid_t tid,
|
||||
return (rc);
|
||||
|
||||
/*
|
||||
* extend the extent
|
||||
* extend the extent
|
||||
*/
|
||||
pxdlist = split->pxdlist;
|
||||
pxd = &pxdlist->pxd[pxdlist->npxd];
|
||||
@@ -1722,7 +1722,7 @@ static int dtExtendPage(tid_t tid,
|
||||
}
|
||||
|
||||
/*
|
||||
* extend the page
|
||||
* extend the page
|
||||
*/
|
||||
sp->header.self = *pxd;
|
||||
|
||||
@@ -1739,9 +1739,6 @@ static int dtExtendPage(tid_t tid,
|
||||
/* update buffer extent descriptor of extended page */
|
||||
xlen = lengthPXD(pxd);
|
||||
xsize = xlen << JFS_SBI(sb)->l2bsize;
|
||||
#ifdef _STILL_TO_PORT
|
||||
bmSetXD(smp, xaddr, xsize);
|
||||
#endif /* _STILL_TO_PORT */
|
||||
|
||||
/*
|
||||
* copy old stbl to new stbl at start of extended area
|
||||
@@ -1836,7 +1833,7 @@ static int dtExtendPage(tid_t tid,
|
||||
}
|
||||
|
||||
/*
|
||||
* update parent entry on the parent/root page
|
||||
* update parent entry on the parent/root page
|
||||
*/
|
||||
/*
|
||||
* acquire a transaction lock on the parent/root page
|
||||
@@ -1904,7 +1901,7 @@ static int dtSplitRoot(tid_t tid,
|
||||
sp = &JFS_IP(ip)->i_dtroot;
|
||||
|
||||
/*
|
||||
* allocate/initialize a single (right) child page
|
||||
* allocate/initialize a single (right) child page
|
||||
*
|
||||
* N.B. at first split, a one (or two) block to fit new entry
|
||||
* is allocated; at subsequent split, a full page is allocated;
|
||||
@@ -1943,7 +1940,7 @@ static int dtSplitRoot(tid_t tid,
|
||||
rp->header.prev = 0;
|
||||
|
||||
/*
|
||||
* move in-line root page into new right page extent
|
||||
* move in-line root page into new right page extent
|
||||
*/
|
||||
/* linelock header + copied entries + new stbl (1st slot) in new page */
|
||||
ASSERT(dtlck->index == 0);
|
||||
@@ -2016,7 +2013,7 @@ static int dtSplitRoot(tid_t tid,
|
||||
dtInsertEntry(rp, split->index, split->key, split->data, &dtlck);
|
||||
|
||||
/*
|
||||
* reset parent/root page
|
||||
* reset parent/root page
|
||||
*
|
||||
* set the 1st entry offset to 0, which force the left-most key
|
||||
* at any level of the tree to be less than any search key.
|
||||
@@ -2102,7 +2099,7 @@ int dtDelete(tid_t tid,
|
||||
dtpage_t *np;
|
||||
|
||||
/*
|
||||
* search for the entry to delete:
|
||||
* search for the entry to delete:
|
||||
*
|
||||
* dtSearch() returns (leaf page pinned, index at which to delete).
|
||||
*/
|
||||
@@ -2253,7 +2250,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip,
|
||||
int i;
|
||||
|
||||
/*
|
||||
* keep the root leaf page which has become empty
|
||||
* keep the root leaf page which has become empty
|
||||
*/
|
||||
if (BT_IS_ROOT(fmp)) {
|
||||
/*
|
||||
@@ -2269,7 +2266,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip,
|
||||
}
|
||||
|
||||
/*
|
||||
* free the non-root leaf page
|
||||
* free the non-root leaf page
|
||||
*/
|
||||
/*
|
||||
* acquire a transaction lock on the page
|
||||
@@ -2299,7 +2296,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip,
|
||||
discard_metapage(fmp);
|
||||
|
||||
/*
|
||||
* propagate page deletion up the directory tree
|
||||
* propagate page deletion up the directory tree
|
||||
*
|
||||
* If the delete from the parent page makes it empty,
|
||||
* continue all the way up the tree.
|
||||
@@ -2440,10 +2437,10 @@ static int dtDeleteUp(tid_t tid, struct inode *ip,
|
||||
|
||||
#ifdef _NOTYET
|
||||
/*
|
||||
* NAME: dtRelocate()
|
||||
* NAME: dtRelocate()
|
||||
*
|
||||
* FUNCTION: relocate dtpage (internal or leaf) of directory;
|
||||
* This function is mainly used by defragfs utility.
|
||||
* FUNCTION: relocate dtpage (internal or leaf) of directory;
|
||||
* This function is mainly used by defragfs utility.
|
||||
*/
|
||||
int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
s64 nxaddr)
|
||||
@@ -2471,8 +2468,8 @@ int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
xlen);
|
||||
|
||||
/*
|
||||
* 1. get the internal parent dtpage covering
|
||||
* router entry for the tartget page to be relocated;
|
||||
* 1. get the internal parent dtpage covering
|
||||
* router entry for the tartget page to be relocated;
|
||||
*/
|
||||
rc = dtSearchNode(ip, lmxaddr, opxd, &btstack);
|
||||
if (rc)
|
||||
@@ -2483,7 +2480,7 @@ int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
jfs_info("dtRelocate: parent router entry validated.");
|
||||
|
||||
/*
|
||||
* 2. relocate the target dtpage
|
||||
* 2. relocate the target dtpage
|
||||
*/
|
||||
/* read in the target page from src extent */
|
||||
DT_GETPAGE(ip, oxaddr, mp, PSIZE, p, rc);
|
||||
@@ -2581,9 +2578,7 @@ int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
|
||||
/* update the buffer extent descriptor of the dtpage */
|
||||
xsize = xlen << JFS_SBI(ip->i_sb)->l2bsize;
|
||||
#ifdef _STILL_TO_PORT
|
||||
bmSetXD(mp, nxaddr, xsize);
|
||||
#endif /* _STILL_TO_PORT */
|
||||
|
||||
/* unpin the relocated page */
|
||||
DT_PUTPAGE(mp);
|
||||
jfs_info("dtRelocate: target dtpage relocated.");
|
||||
@@ -2594,7 +2589,7 @@ int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
*/
|
||||
|
||||
/*
|
||||
* 3. acquire maplock for the source extent to be freed;
|
||||
* 3. acquire maplock for the source extent to be freed;
|
||||
*/
|
||||
/* for dtpage relocation, write a LOG_NOREDOPAGE record
|
||||
* for the source dtpage (logredo() will init NoRedoPage
|
||||
@@ -2609,7 +2604,7 @@ int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
pxdlock->index = 1;
|
||||
|
||||
/*
|
||||
* 4. update the parent router entry for relocation;
|
||||
* 4. update the parent router entry for relocation;
|
||||
*
|
||||
* acquire tlck for the parent entry covering the target dtpage;
|
||||
* write LOG_REDOPAGE to apply after image only;
|
||||
@@ -2637,7 +2632,7 @@ int dtRelocate(tid_t tid, struct inode *ip, s64 lmxaddr, pxd_t * opxd,
|
||||
* NAME: dtSearchNode()
|
||||
*
|
||||
* FUNCTION: Search for an dtpage containing a specified address
|
||||
* This function is mainly used by defragfs utility.
|
||||
* This function is mainly used by defragfs utility.
|
||||
*
|
||||
* NOTE: Search result on stack, the found page is pinned at exit.
|
||||
* The result page must be an internal dtpage.
|
||||
@@ -2660,7 +2655,7 @@ static int dtSearchNode(struct inode *ip, s64 lmxaddr, pxd_t * kpxd,
|
||||
BT_CLR(btstack); /* reset stack */
|
||||
|
||||
/*
|
||||
* descend tree to the level with specified leftmost page
|
||||
* descend tree to the level with specified leftmost page
|
||||
*
|
||||
* by convention, root bn = 0.
|
||||
*/
|
||||
@@ -2699,7 +2694,7 @@ static int dtSearchNode(struct inode *ip, s64 lmxaddr, pxd_t * kpxd,
|
||||
}
|
||||
|
||||
/*
|
||||
* search each page at the current levevl
|
||||
* search each page at the current levevl
|
||||
*/
|
||||
loop:
|
||||
stbl = DT_GETSTBL(p);
|
||||
@@ -3044,9 +3039,9 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
|
||||
if (DO_INDEX(ip)) {
|
||||
/*
|
||||
* persistent index is stored in directory entries.
|
||||
* Special cases: 0 = .
|
||||
* 1 = ..
|
||||
* -1 = End of directory
|
||||
* Special cases: 0 = .
|
||||
* 1 = ..
|
||||
* -1 = End of directory
|
||||
*/
|
||||
do_index = 1;
|
||||
|
||||
@@ -3128,10 +3123,10 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
|
||||
/*
|
||||
* Legacy filesystem - OS/2 & Linux JFS < 0.3.6
|
||||
*
|
||||
* pn = index = 0: First entry "."
|
||||
* pn = 0; index = 1: Second entry ".."
|
||||
* pn > 0: Real entries, pn=1 -> leftmost page
|
||||
* pn = index = -1: No more entries
|
||||
* pn = index = 0: First entry "."
|
||||
* pn = 0; index = 1: Second entry ".."
|
||||
* pn > 0: Real entries, pn=1 -> leftmost page
|
||||
* pn = index = -1: No more entries
|
||||
*/
|
||||
dtpos = filp->f_pos;
|
||||
if (dtpos == 0) {
|
||||
@@ -3351,7 +3346,7 @@ static int dtReadFirst(struct inode *ip, struct btstack * btstack)
|
||||
BT_CLR(btstack); /* reset stack */
|
||||
|
||||
/*
|
||||
* descend leftmost path of the tree
|
||||
* descend leftmost path of the tree
|
||||
*
|
||||
* by convention, root bn = 0.
|
||||
*/
|
||||
@@ -4531,7 +4526,7 @@ int dtModify(tid_t tid, struct inode *ip,
|
||||
struct ldtentry *entry;
|
||||
|
||||
/*
|
||||
* search for the entry to modify:
|
||||
* search for the entry to modify:
|
||||
*
|
||||
* dtSearch() returns (leaf page pinned, index at which to modify).
|
||||
*/
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ typedef union {
|
||||
|
||||
|
||||
/*
|
||||
* entry segment/slot
|
||||
* entry segment/slot
|
||||
*
|
||||
* an entry consists of type dependent head/only segment/slot and
|
||||
* additional segments/slots linked vi next field;
|
||||
|
||||
+51
-51
@@ -34,8 +34,8 @@ static int extBrealloc(struct inode *, s64, s64, s64 *, s64 *);
|
||||
#endif
|
||||
static s64 extRoundDown(s64 nb);
|
||||
|
||||
#define DPD(a) (printk("(a): %d\n",(a)))
|
||||
#define DPC(a) (printk("(a): %c\n",(a)))
|
||||
#define DPD(a) (printk("(a): %d\n",(a)))
|
||||
#define DPC(a) (printk("(a): %c\n",(a)))
|
||||
#define DPL1(a) \
|
||||
{ \
|
||||
if ((a) >> 32) \
|
||||
@@ -51,19 +51,19 @@ static s64 extRoundDown(s64 nb);
|
||||
printk("(a): %x\n",(a) << 32); \
|
||||
}
|
||||
|
||||
#define DPD1(a) (printk("(a): %d ",(a)))
|
||||
#define DPX(a) (printk("(a): %08x\n",(a)))
|
||||
#define DPX1(a) (printk("(a): %08x ",(a)))
|
||||
#define DPS(a) (printk("%s\n",(a)))
|
||||
#define DPE(a) (printk("\nENTERING: %s\n",(a)))
|
||||
#define DPE1(a) (printk("\nENTERING: %s",(a)))
|
||||
#define DPS1(a) (printk(" %s ",(a)))
|
||||
#define DPD1(a) (printk("(a): %d ",(a)))
|
||||
#define DPX(a) (printk("(a): %08x\n",(a)))
|
||||
#define DPX1(a) (printk("(a): %08x ",(a)))
|
||||
#define DPS(a) (printk("%s\n",(a)))
|
||||
#define DPE(a) (printk("\nENTERING: %s\n",(a)))
|
||||
#define DPE1(a) (printk("\nENTERING: %s",(a)))
|
||||
#define DPS1(a) (printk(" %s ",(a)))
|
||||
|
||||
|
||||
/*
|
||||
* NAME: extAlloc()
|
||||
*
|
||||
* FUNCTION: allocate an extent for a specified page range within a
|
||||
* FUNCTION: allocate an extent for a specified page range within a
|
||||
* file.
|
||||
*
|
||||
* PARAMETERS:
|
||||
@@ -78,9 +78,9 @@ static s64 extRoundDown(s64 nb);
|
||||
* should be marked as allocated but not recorded.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
*/
|
||||
int
|
||||
extAlloc(struct inode *ip, s64 xlen, s64 pno, xad_t * xp, bool abnr)
|
||||
@@ -192,9 +192,9 @@ extAlloc(struct inode *ip, s64 xlen, s64 pno, xad_t * xp, bool abnr)
|
||||
|
||||
#ifdef _NOTYET
|
||||
/*
|
||||
* NAME: extRealloc()
|
||||
* NAME: extRealloc()
|
||||
*
|
||||
* FUNCTION: extend the allocation of a file extent containing a
|
||||
* FUNCTION: extend the allocation of a file extent containing a
|
||||
* partial back last page.
|
||||
*
|
||||
* PARAMETERS:
|
||||
@@ -207,9 +207,9 @@ extAlloc(struct inode *ip, s64 xlen, s64 pno, xad_t * xp, bool abnr)
|
||||
* should be marked as allocated but not recorded.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
*/
|
||||
int extRealloc(struct inode *ip, s64 nxlen, xad_t * xp, bool abnr)
|
||||
{
|
||||
@@ -345,9 +345,9 @@ exit:
|
||||
|
||||
|
||||
/*
|
||||
* NAME: extHint()
|
||||
* NAME: extHint()
|
||||
*
|
||||
* FUNCTION: produce an extent allocation hint for a file offset.
|
||||
* FUNCTION: produce an extent allocation hint for a file offset.
|
||||
*
|
||||
* PARAMETERS:
|
||||
* ip - the inode of the file.
|
||||
@@ -356,8 +356,8 @@ exit:
|
||||
* the hint.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
*/
|
||||
int extHint(struct inode *ip, s64 offset, xad_t * xp)
|
||||
{
|
||||
@@ -387,7 +387,7 @@ int extHint(struct inode *ip, s64 offset, xad_t * xp)
|
||||
lxdl.nlxd = 1;
|
||||
lxdl.lxd = &lxd;
|
||||
LXDoffset(&lxd, prev)
|
||||
LXDlength(&lxd, nbperpage);
|
||||
LXDlength(&lxd, nbperpage);
|
||||
|
||||
xadl.maxnxad = 1;
|
||||
xadl.nxad = 0;
|
||||
@@ -397,11 +397,11 @@ int extHint(struct inode *ip, s64 offset, xad_t * xp)
|
||||
if ((rc = xtLookupList(ip, &lxdl, &xadl, 0)))
|
||||
return (rc);
|
||||
|
||||
/* check if not extent exists for the previous page.
|
||||
/* check if no extent exists for the previous page.
|
||||
* this is possible for sparse files.
|
||||
*/
|
||||
if (xadl.nxad == 0) {
|
||||
// assert(ISSPARSE(ip));
|
||||
// assert(ISSPARSE(ip));
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -410,28 +410,28 @@ int extHint(struct inode *ip, s64 offset, xad_t * xp)
|
||||
*/
|
||||
xp->flag &= XAD_NOTRECORDED;
|
||||
|
||||
if(xadl.nxad != 1 || lengthXAD(xp) != nbperpage) {
|
||||
if(xadl.nxad != 1 || lengthXAD(xp) != nbperpage) {
|
||||
jfs_error(ip->i_sb, "extHint: corrupt xtree");
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* NAME: extRecord()
|
||||
* NAME: extRecord()
|
||||
*
|
||||
* FUNCTION: change a page with a file from not recorded to recorded.
|
||||
* FUNCTION: change a page with a file from not recorded to recorded.
|
||||
*
|
||||
* PARAMETERS:
|
||||
* ip - inode of the file.
|
||||
* cp - cbuf of the file page.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
*/
|
||||
int extRecord(struct inode *ip, xad_t * xp)
|
||||
{
|
||||
@@ -451,9 +451,9 @@ int extRecord(struct inode *ip, xad_t * xp)
|
||||
|
||||
#ifdef _NOTYET
|
||||
/*
|
||||
* NAME: extFill()
|
||||
* NAME: extFill()
|
||||
*
|
||||
* FUNCTION: allocate disk space for a file page that represents
|
||||
* FUNCTION: allocate disk space for a file page that represents
|
||||
* a file hole.
|
||||
*
|
||||
* PARAMETERS:
|
||||
@@ -461,16 +461,16 @@ int extRecord(struct inode *ip, xad_t * xp)
|
||||
* cp - cbuf of the file page represent the hole.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
*/
|
||||
int extFill(struct inode *ip, xad_t * xp)
|
||||
{
|
||||
int rc, nbperpage = JFS_SBI(ip->i_sb)->nbperpage;
|
||||
s64 blkno = offsetXAD(xp) >> ip->i_blkbits;
|
||||
|
||||
// assert(ISSPARSE(ip));
|
||||
// assert(ISSPARSE(ip));
|
||||
|
||||
/* initialize the extent allocation hint */
|
||||
XADaddress(xp, 0);
|
||||
@@ -489,7 +489,7 @@ int extFill(struct inode *ip, xad_t * xp)
|
||||
/*
|
||||
* NAME: extBalloc()
|
||||
*
|
||||
* FUNCTION: allocate disk blocks to form an extent.
|
||||
* FUNCTION: allocate disk blocks to form an extent.
|
||||
*
|
||||
* initially, we will try to allocate disk blocks for the
|
||||
* requested size (nblocks). if this fails (nblocks
|
||||
@@ -513,9 +513,9 @@ int extFill(struct inode *ip, xad_t * xp)
|
||||
* allocated block range.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
*/
|
||||
static int
|
||||
extBalloc(struct inode *ip, s64 hint, s64 * nblocks, s64 * blkno)
|
||||
@@ -580,7 +580,7 @@ extBalloc(struct inode *ip, s64 hint, s64 * nblocks, s64 * blkno)
|
||||
/*
|
||||
* NAME: extBrealloc()
|
||||
*
|
||||
* FUNCTION: attempt to extend an extent's allocation.
|
||||
* FUNCTION: attempt to extend an extent's allocation.
|
||||
*
|
||||
* Initially, we will try to extend the extent's allocation
|
||||
* in place. If this fails, we'll try to move the extent
|
||||
@@ -597,8 +597,8 @@ extBalloc(struct inode *ip, s64 hint, s64 * nblocks, s64 * blkno)
|
||||
*
|
||||
* PARAMETERS:
|
||||
* ip - the inode of the file.
|
||||
* blkno - starting block number of the extents current allocation.
|
||||
* nblks - number of blocks within the extents current allocation.
|
||||
* blkno - starting block number of the extents current allocation.
|
||||
* nblks - number of blocks within the extents current allocation.
|
||||
* newnblks - pointer to a s64 value. on entry, this value is the
|
||||
* the new desired extent size (number of blocks). on
|
||||
* successful exit, this value is set to the extent's actual
|
||||
@@ -606,9 +606,9 @@ extBalloc(struct inode *ip, s64 hint, s64 * nblocks, s64 * blkno)
|
||||
* newblkno - the starting block number of the extents new allocation.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
* 0 - success
|
||||
* -EIO - i/o error.
|
||||
* -ENOSPC - insufficient disk resources.
|
||||
*/
|
||||
static int
|
||||
extBrealloc(struct inode *ip,
|
||||
@@ -634,16 +634,16 @@ extBrealloc(struct inode *ip,
|
||||
|
||||
|
||||
/*
|
||||
* NAME: extRoundDown()
|
||||
* NAME: extRoundDown()
|
||||
*
|
||||
* FUNCTION: round down a specified number of blocks to the next
|
||||
* FUNCTION: round down a specified number of blocks to the next
|
||||
* smallest power of 2 number.
|
||||
*
|
||||
* PARAMETERS:
|
||||
* nb - the inode of the file.
|
||||
*
|
||||
* RETURN VALUES:
|
||||
* next smallest power of 2 number.
|
||||
* next smallest power of 2 number.
|
||||
*/
|
||||
static s64 extRoundDown(s64 nb)
|
||||
{
|
||||
|
||||
+6
-7
@@ -34,9 +34,9 @@
|
||||
#define JFS_UNICODE 0x00000001 /* unicode name */
|
||||
|
||||
/* mount time flags for error handling */
|
||||
#define JFS_ERR_REMOUNT_RO 0x00000002 /* remount read-only */
|
||||
#define JFS_ERR_CONTINUE 0x00000004 /* continue */
|
||||
#define JFS_ERR_PANIC 0x00000008 /* panic */
|
||||
#define JFS_ERR_REMOUNT_RO 0x00000002 /* remount read-only */
|
||||
#define JFS_ERR_CONTINUE 0x00000004 /* continue */
|
||||
#define JFS_ERR_PANIC 0x00000008 /* panic */
|
||||
|
||||
/* Quota support */
|
||||
#define JFS_USRQUOTA 0x00000010
|
||||
@@ -83,7 +83,6 @@
|
||||
/* case-insensitive name/directory support */
|
||||
|
||||
#define JFS_AIX 0x80000000 /* AIX support */
|
||||
/* POSIX name/directory support - Never implemented*/
|
||||
|
||||
/*
|
||||
* buffer cache configuration
|
||||
@@ -113,10 +112,10 @@
|
||||
#define IDATASIZE 256 /* inode inline data size */
|
||||
#define IXATTRSIZE 128 /* inode inline extended attribute size */
|
||||
|
||||
#define XTPAGE_SIZE 4096
|
||||
#define log2_PAGESIZE 12
|
||||
#define XTPAGE_SIZE 4096
|
||||
#define log2_PAGESIZE 12
|
||||
|
||||
#define IAG_SIZE 4096
|
||||
#define IAG_SIZE 4096
|
||||
#define IAG_EXTENT_SIZE 4096
|
||||
#define INOSPERIAG 4096 /* number of disk inodes per iag */
|
||||
#define L2INOSPERIAG 12 /* l2 number of disk inodes per iag */
|
||||
|
||||
+141
-155
File diff suppressed because it is too large
Load Diff
+49
-49
@@ -24,17 +24,17 @@
|
||||
* jfs_imap.h: disk inode manager
|
||||
*/
|
||||
|
||||
#define EXTSPERIAG 128 /* number of disk inode extent per iag */
|
||||
#define IMAPBLKNO 0 /* lblkno of dinomap within inode map */
|
||||
#define SMAPSZ 4 /* number of words per summary map */
|
||||
#define EXTSPERIAG 128 /* number of disk inode extent per iag */
|
||||
#define IMAPBLKNO 0 /* lblkno of dinomap within inode map */
|
||||
#define SMAPSZ 4 /* number of words per summary map */
|
||||
#define EXTSPERSUM 32 /* number of extents per summary map entry */
|
||||
#define L2EXTSPERSUM 5 /* l2 number of extents per summary map */
|
||||
#define PGSPERIEXT 4 /* number of 4K pages per dinode extent */
|
||||
#define MAXIAGS ((1<<20)-1) /* maximum number of iags */
|
||||
#define MAXAG 128 /* maximum number of allocation groups */
|
||||
#define MAXIAGS ((1<<20)-1) /* maximum number of iags */
|
||||
#define MAXAG 128 /* maximum number of allocation groups */
|
||||
|
||||
#define AMAPSIZE 512 /* bytes in the IAG allocation maps */
|
||||
#define SMAPSIZE 16 /* bytes in the IAG summary maps */
|
||||
#define AMAPSIZE 512 /* bytes in the IAG allocation maps */
|
||||
#define SMAPSIZE 16 /* bytes in the IAG summary maps */
|
||||
|
||||
/* convert inode number to iag number */
|
||||
#define INOTOIAG(ino) ((ino) >> L2INOSPERIAG)
|
||||
@@ -60,31 +60,31 @@
|
||||
* inode allocation group page (per 4096 inodes of an AG)
|
||||
*/
|
||||
struct iag {
|
||||
__le64 agstart; /* 8: starting block of ag */
|
||||
__le32 iagnum; /* 4: inode allocation group number */
|
||||
__le32 inofreefwd; /* 4: ag inode free list forward */
|
||||
__le32 inofreeback; /* 4: ag inode free list back */
|
||||
__le32 extfreefwd; /* 4: ag inode extent free list forward */
|
||||
__le32 extfreeback; /* 4: ag inode extent free list back */
|
||||
__le32 iagfree; /* 4: iag free list */
|
||||
__le64 agstart; /* 8: starting block of ag */
|
||||
__le32 iagnum; /* 4: inode allocation group number */
|
||||
__le32 inofreefwd; /* 4: ag inode free list forward */
|
||||
__le32 inofreeback; /* 4: ag inode free list back */
|
||||
__le32 extfreefwd; /* 4: ag inode extent free list forward */
|
||||
__le32 extfreeback; /* 4: ag inode extent free list back */
|
||||
__le32 iagfree; /* 4: iag free list */
|
||||
|
||||
/* summary map: 1 bit per inode extent */
|
||||
__le32 inosmap[SMAPSZ]; /* 16: sum map of mapwords w/ free inodes;
|
||||
* note: this indicates free and backed
|
||||
* inodes, if the extent is not backed the
|
||||
* value will be 1. if the extent is
|
||||
* backed but all inodes are being used the
|
||||
* value will be 1. if the extent is
|
||||
* backed but at least one of the inodes is
|
||||
* free the value will be 0.
|
||||
* note: this indicates free and backed
|
||||
* inodes, if the extent is not backed the
|
||||
* value will be 1. if the extent is
|
||||
* backed but all inodes are being used the
|
||||
* value will be 1. if the extent is
|
||||
* backed but at least one of the inodes is
|
||||
* free the value will be 0.
|
||||
*/
|
||||
__le32 extsmap[SMAPSZ]; /* 16: sum map of mapwords w/ free extents */
|
||||
__le32 nfreeinos; /* 4: number of free inodes */
|
||||
__le32 nfreeexts; /* 4: number of free extents */
|
||||
__le32 nfreeinos; /* 4: number of free inodes */
|
||||
__le32 nfreeexts; /* 4: number of free extents */
|
||||
/* (72) */
|
||||
u8 pad[1976]; /* 1976: pad to 2048 bytes */
|
||||
/* allocation bit map: 1 bit per inode (0 - free, 1 - allocated) */
|
||||
__le32 wmap[EXTSPERIAG]; /* 512: working allocation map */
|
||||
__le32 wmap[EXTSPERIAG]; /* 512: working allocation map */
|
||||
__le32 pmap[EXTSPERIAG]; /* 512: persistent allocation map */
|
||||
pxd_t inoext[EXTSPERIAG]; /* 1024: inode extent addresses */
|
||||
}; /* (4096) */
|
||||
@@ -93,44 +93,44 @@ struct iag {
|
||||
* per AG control information (in inode map control page)
|
||||
*/
|
||||
struct iagctl_disk {
|
||||
__le32 inofree; /* 4: free inode list anchor */
|
||||
__le32 extfree; /* 4: free extent list anchor */
|
||||
__le32 numinos; /* 4: number of backed inodes */
|
||||
__le32 numfree; /* 4: number of free inodes */
|
||||
__le32 inofree; /* 4: free inode list anchor */
|
||||
__le32 extfree; /* 4: free extent list anchor */
|
||||
__le32 numinos; /* 4: number of backed inodes */
|
||||
__le32 numfree; /* 4: number of free inodes */
|
||||
}; /* (16) */
|
||||
|
||||
struct iagctl {
|
||||
int inofree; /* free inode list anchor */
|
||||
int extfree; /* free extent list anchor */
|
||||
int numinos; /* number of backed inodes */
|
||||
int numfree; /* number of free inodes */
|
||||
int inofree; /* free inode list anchor */
|
||||
int extfree; /* free extent list anchor */
|
||||
int numinos; /* number of backed inodes */
|
||||
int numfree; /* number of free inodes */
|
||||
};
|
||||
|
||||
/*
|
||||
* per fileset/aggregate inode map control page
|
||||
*/
|
||||
struct dinomap_disk {
|
||||
__le32 in_freeiag; /* 4: free iag list anchor */
|
||||
__le32 in_nextiag; /* 4: next free iag number */
|
||||
__le32 in_numinos; /* 4: num of backed inodes */
|
||||
__le32 in_freeiag; /* 4: free iag list anchor */
|
||||
__le32 in_nextiag; /* 4: next free iag number */
|
||||
__le32 in_numinos; /* 4: num of backed inodes */
|
||||
__le32 in_numfree; /* 4: num of free backed inodes */
|
||||
__le32 in_nbperiext; /* 4: num of blocks per inode extent */
|
||||
__le32 in_l2nbperiext; /* 4: l2 of in_nbperiext */
|
||||
__le32 in_diskblock; /* 4: for standalone test driver */
|
||||
__le32 in_maxag; /* 4: for standalone test driver */
|
||||
u8 pad[2016]; /* 2016: pad to 2048 */
|
||||
__le32 in_l2nbperiext; /* 4: l2 of in_nbperiext */
|
||||
__le32 in_diskblock; /* 4: for standalone test driver */
|
||||
__le32 in_maxag; /* 4: for standalone test driver */
|
||||
u8 pad[2016]; /* 2016: pad to 2048 */
|
||||
struct iagctl_disk in_agctl[MAXAG]; /* 2048: AG control information */
|
||||
}; /* (4096) */
|
||||
|
||||
struct dinomap {
|
||||
int in_freeiag; /* free iag list anchor */
|
||||
int in_nextiag; /* next free iag number */
|
||||
int in_numinos; /* num of backed inodes */
|
||||
int in_numfree; /* num of free backed inodes */
|
||||
int in_freeiag; /* free iag list anchor */
|
||||
int in_nextiag; /* next free iag number */
|
||||
int in_numinos; /* num of backed inodes */
|
||||
int in_numfree; /* num of free backed inodes */
|
||||
int in_nbperiext; /* num of blocks per inode extent */
|
||||
int in_l2nbperiext; /* l2 of in_nbperiext */
|
||||
int in_diskblock; /* for standalone test driver */
|
||||
int in_maxag; /* for standalone test driver */
|
||||
int in_l2nbperiext; /* l2 of in_nbperiext */
|
||||
int in_diskblock; /* for standalone test driver */
|
||||
int in_maxag; /* for standalone test driver */
|
||||
struct iagctl in_agctl[MAXAG]; /* AG control information */
|
||||
};
|
||||
|
||||
@@ -139,9 +139,9 @@ struct dinomap {
|
||||
*/
|
||||
struct inomap {
|
||||
struct dinomap im_imap; /* 4096: inode allocation control */
|
||||
struct inode *im_ipimap; /* 4: ptr to inode for imap */
|
||||
struct mutex im_freelock; /* 4: iag free list lock */
|
||||
struct mutex im_aglock[MAXAG]; /* 512: per AG locks */
|
||||
struct inode *im_ipimap; /* 4: ptr to inode for imap */
|
||||
struct mutex im_freelock; /* 4: iag free list lock */
|
||||
struct mutex im_aglock[MAXAG]; /* 512: per AG locks */
|
||||
u32 *im_DBGdimap;
|
||||
atomic_t im_numinos; /* num of backed inodes */
|
||||
atomic_t im_numfree; /* num of free backed inodes */
|
||||
|
||||
+2
-2
@@ -40,7 +40,7 @@ struct jfs_inode_info {
|
||||
uint mode2; /* jfs-specific mode */
|
||||
uint saved_uid; /* saved for uid mount option */
|
||||
uint saved_gid; /* saved for gid mount option */
|
||||
pxd_t ixpxd; /* inode extent descriptor */
|
||||
pxd_t ixpxd; /* inode extent descriptor */
|
||||
dxd_t acl; /* dxd describing acl */
|
||||
dxd_t ea; /* dxd describing ea */
|
||||
time_t otime; /* time created */
|
||||
@@ -190,7 +190,7 @@ struct jfs_sb_info {
|
||||
uint gengen; /* inode generation generator*/
|
||||
uint inostamp; /* shows inode belongs to fileset*/
|
||||
|
||||
/* Formerly in ipbmap */
|
||||
/* Formerly in ipbmap */
|
||||
struct bmap *bmap; /* incore bmap descriptor */
|
||||
struct nls_table *nls_tab; /* current codepage */
|
||||
struct inode *direct_inode; /* metadata inode */
|
||||
|
||||
+48
-42
@@ -244,7 +244,7 @@ int lmLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
|
||||
goto writeRecord;
|
||||
|
||||
/*
|
||||
* initialize/update page/transaction recovery lsn
|
||||
* initialize/update page/transaction recovery lsn
|
||||
*/
|
||||
lsn = log->lsn;
|
||||
|
||||
@@ -263,7 +263,7 @@ int lmLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
|
||||
}
|
||||
|
||||
/*
|
||||
* initialize/update lsn of tblock of the page
|
||||
* initialize/update lsn of tblock of the page
|
||||
*
|
||||
* transaction inherits oldest lsn of pages associated
|
||||
* with allocation/deallocation of resources (their
|
||||
@@ -307,7 +307,7 @@ int lmLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
|
||||
LOGSYNC_UNLOCK(log, flags);
|
||||
|
||||
/*
|
||||
* write the log record
|
||||
* write the log record
|
||||
*/
|
||||
writeRecord:
|
||||
lsn = lmWriteRecord(log, tblk, lrd, tlck);
|
||||
@@ -372,7 +372,7 @@ lmWriteRecord(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
|
||||
goto moveLrd;
|
||||
|
||||
/*
|
||||
* move log record data
|
||||
* move log record data
|
||||
*/
|
||||
/* retrieve source meta-data page to log */
|
||||
if (tlck->flag & tlckPAGELOCK) {
|
||||
@@ -465,7 +465,7 @@ lmWriteRecord(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
|
||||
}
|
||||
|
||||
/*
|
||||
* move log record descriptor
|
||||
* move log record descriptor
|
||||
*/
|
||||
moveLrd:
|
||||
lrd->length = cpu_to_le16(len);
|
||||
@@ -574,7 +574,7 @@ static int lmNextPage(struct jfs_log * log)
|
||||
LOGGC_LOCK(log);
|
||||
|
||||
/*
|
||||
* write or queue the full page at the tail of write queue
|
||||
* write or queue the full page at the tail of write queue
|
||||
*/
|
||||
/* get the tail tblk on commit queue */
|
||||
if (list_empty(&log->cqueue))
|
||||
@@ -625,7 +625,7 @@ static int lmNextPage(struct jfs_log * log)
|
||||
LOGGC_UNLOCK(log);
|
||||
|
||||
/*
|
||||
* allocate/initialize next page
|
||||
* allocate/initialize next page
|
||||
*/
|
||||
/* if log wraps, the first data page of log is 2
|
||||
* (0 never used, 1 is superblock).
|
||||
@@ -953,7 +953,7 @@ static int lmLogSync(struct jfs_log * log, int hard_sync)
|
||||
}
|
||||
|
||||
/*
|
||||
* forward syncpt
|
||||
* forward syncpt
|
||||
*/
|
||||
/* if last sync is same as last syncpt,
|
||||
* invoke sync point forward processing to update sync.
|
||||
@@ -989,7 +989,7 @@ static int lmLogSync(struct jfs_log * log, int hard_sync)
|
||||
lsn = log->lsn;
|
||||
|
||||
/*
|
||||
* setup next syncpt trigger (SWAG)
|
||||
* setup next syncpt trigger (SWAG)
|
||||
*/
|
||||
logsize = log->logsize;
|
||||
|
||||
@@ -1000,11 +1000,11 @@ static int lmLogSync(struct jfs_log * log, int hard_sync)
|
||||
if (more < 2 * LOGPSIZE) {
|
||||
jfs_warn("\n ... Log Wrap ... Log Wrap ... Log Wrap ...\n");
|
||||
/*
|
||||
* log wrapping
|
||||
* log wrapping
|
||||
*
|
||||
* option 1 - panic ? No.!
|
||||
* option 2 - shutdown file systems
|
||||
* associated with log ?
|
||||
* associated with log ?
|
||||
* option 3 - extend log ?
|
||||
*/
|
||||
/*
|
||||
@@ -1062,7 +1062,7 @@ void jfs_syncpt(struct jfs_log *log, int hard_sync)
|
||||
/*
|
||||
* NAME: lmLogOpen()
|
||||
*
|
||||
* FUNCTION: open the log on first open;
|
||||
* FUNCTION: open the log on first open;
|
||||
* insert filesystem in the active list of the log.
|
||||
*
|
||||
* PARAMETER: ipmnt - file system mount inode
|
||||
@@ -1113,7 +1113,7 @@ int lmLogOpen(struct super_block *sb)
|
||||
init_waitqueue_head(&log->syncwait);
|
||||
|
||||
/*
|
||||
* external log as separate logical volume
|
||||
* external log as separate logical volume
|
||||
*
|
||||
* file systems to log may have n-to-1 relationship;
|
||||
*/
|
||||
@@ -1155,7 +1155,7 @@ journal_found:
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* unwind on error
|
||||
* unwind on error
|
||||
*/
|
||||
shutdown: /* unwind lbmLogInit() */
|
||||
list_del(&log->journal_list);
|
||||
@@ -1427,7 +1427,7 @@ int lmLogInit(struct jfs_log * log)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* unwind on error
|
||||
* unwind on error
|
||||
*/
|
||||
errout30: /* release log page */
|
||||
log->wqueue = NULL;
|
||||
@@ -1480,7 +1480,7 @@ int lmLogClose(struct super_block *sb)
|
||||
|
||||
if (test_bit(log_INLINELOG, &log->flag)) {
|
||||
/*
|
||||
* in-line log in host file system
|
||||
* in-line log in host file system
|
||||
*/
|
||||
rc = lmLogShutdown(log);
|
||||
kfree(log);
|
||||
@@ -1504,7 +1504,7 @@ int lmLogClose(struct super_block *sb)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* external log as separate logical volume
|
||||
* external log as separate logical volume
|
||||
*/
|
||||
list_del(&log->journal_list);
|
||||
bdev = log->bdev;
|
||||
@@ -1622,20 +1622,26 @@ void jfs_flush_journal(struct jfs_log *log, int wait)
|
||||
if (!list_empty(&log->synclist)) {
|
||||
struct logsyncblk *lp;
|
||||
|
||||
printk(KERN_ERR "jfs_flush_journal: synclist not empty\n");
|
||||
list_for_each_entry(lp, &log->synclist, synclist) {
|
||||
if (lp->xflag & COMMIT_PAGE) {
|
||||
struct metapage *mp = (struct metapage *)lp;
|
||||
dump_mem("orphan metapage", lp,
|
||||
sizeof(struct metapage));
|
||||
dump_mem("page", mp->page, sizeof(struct page));
|
||||
}
|
||||
else
|
||||
dump_mem("orphan tblock", lp,
|
||||
sizeof(struct tblock));
|
||||
print_hex_dump(KERN_ERR, "metapage: ",
|
||||
DUMP_PREFIX_ADDRESS, 16, 4,
|
||||
mp, sizeof(struct metapage), 0);
|
||||
print_hex_dump(KERN_ERR, "page: ",
|
||||
DUMP_PREFIX_ADDRESS, 16,
|
||||
sizeof(long), mp->page,
|
||||
sizeof(struct page), 0);
|
||||
} else
|
||||
print_hex_dump(KERN_ERR, "tblock:",
|
||||
DUMP_PREFIX_ADDRESS, 16, 4,
|
||||
lp, sizeof(struct tblock), 0);
|
||||
}
|
||||
}
|
||||
#else
|
||||
WARN_ON(!list_empty(&log->synclist));
|
||||
#endif
|
||||
//assert(list_empty(&log->synclist));
|
||||
clear_bit(log_FLUSH, &log->flag);
|
||||
}
|
||||
|
||||
@@ -1723,7 +1729,7 @@ int lmLogShutdown(struct jfs_log * log)
|
||||
*
|
||||
* PARAMETE: log - pointer to logs inode.
|
||||
* fsdev - kdev_t of filesystem.
|
||||
* serial - pointer to returned log serial number
|
||||
* serial - pointer to returned log serial number
|
||||
* activate - insert/remove device from active list.
|
||||
*
|
||||
* RETURN: 0 - success
|
||||
@@ -1963,7 +1969,7 @@ static void lbmfree(struct lbuf * bp)
|
||||
* FUNCTION: add a log buffer to the log redrive list
|
||||
*
|
||||
* PARAMETER:
|
||||
* bp - log buffer
|
||||
* bp - log buffer
|
||||
*
|
||||
* NOTES:
|
||||
* Takes log_redrive_lock.
|
||||
@@ -2054,7 +2060,7 @@ static void lbmWrite(struct jfs_log * log, struct lbuf * bp, int flag,
|
||||
bp->l_flag = flag;
|
||||
|
||||
/*
|
||||
* insert bp at tail of write queue associated with log
|
||||
* insert bp at tail of write queue associated with log
|
||||
*
|
||||
* (request is either for bp already/currently at head of queue
|
||||
* or new bp to be inserted at tail)
|
||||
@@ -2117,7 +2123,7 @@ static void lbmDirectWrite(struct jfs_log * log, struct lbuf * bp, int flag)
|
||||
log->base + (bp->l_pn << (L2LOGPSIZE - log->l2bsize));
|
||||
|
||||
/*
|
||||
* initiate pageout of the page
|
||||
* initiate pageout of the page
|
||||
*/
|
||||
lbmStartIO(bp);
|
||||
}
|
||||
@@ -2128,7 +2134,7 @@ static void lbmDirectWrite(struct jfs_log * log, struct lbuf * bp, int flag)
|
||||
*
|
||||
* FUNCTION: Interface to DD strategy routine
|
||||
*
|
||||
* RETURN: none
|
||||
* RETURN: none
|
||||
*
|
||||
* serialization: LCACHE_LOCK() is NOT held during log i/o;
|
||||
*/
|
||||
@@ -2222,7 +2228,7 @@ static int lbmIODone(struct bio *bio, unsigned int bytes_done, int error)
|
||||
bio_put(bio);
|
||||
|
||||
/*
|
||||
* pagein completion
|
||||
* pagein completion
|
||||
*/
|
||||
if (bp->l_flag & lbmREAD) {
|
||||
bp->l_flag &= ~lbmREAD;
|
||||
@@ -2236,7 +2242,7 @@ static int lbmIODone(struct bio *bio, unsigned int bytes_done, int error)
|
||||
}
|
||||
|
||||
/*
|
||||
* pageout completion
|
||||
* pageout completion
|
||||
*
|
||||
* the bp at the head of write queue has completed pageout.
|
||||
*
|
||||
@@ -2302,7 +2308,7 @@ static int lbmIODone(struct bio *bio, unsigned int bytes_done, int error)
|
||||
}
|
||||
|
||||
/*
|
||||
* synchronous pageout:
|
||||
* synchronous pageout:
|
||||
*
|
||||
* buffer has not necessarily been removed from write queue
|
||||
* (e.g., synchronous write of partial-page with COMMIT):
|
||||
@@ -2316,7 +2322,7 @@ static int lbmIODone(struct bio *bio, unsigned int bytes_done, int error)
|
||||
}
|
||||
|
||||
/*
|
||||
* Group Commit pageout:
|
||||
* Group Commit pageout:
|
||||
*/
|
||||
else if (bp->l_flag & lbmGC) {
|
||||
LCACHE_UNLOCK(flags);
|
||||
@@ -2324,7 +2330,7 @@ static int lbmIODone(struct bio *bio, unsigned int bytes_done, int error)
|
||||
}
|
||||
|
||||
/*
|
||||
* asynchronous pageout:
|
||||
* asynchronous pageout:
|
||||
*
|
||||
* buffer must have been removed from write queue:
|
||||
* insert buffer at head of freelist where it can be recycled
|
||||
@@ -2375,7 +2381,7 @@ int jfsIOWait(void *arg)
|
||||
* FUNCTION: format file system log
|
||||
*
|
||||
* PARAMETERS:
|
||||
* log - volume log
|
||||
* log - volume log
|
||||
* logAddress - start address of log space in FS block
|
||||
* logSize - length of log space in FS block;
|
||||
*
|
||||
@@ -2407,16 +2413,16 @@ int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize)
|
||||
npages = logSize >> sbi->l2nbperpage;
|
||||
|
||||
/*
|
||||
* log space:
|
||||
* log space:
|
||||
*
|
||||
* page 0 - reserved;
|
||||
* page 1 - log superblock;
|
||||
* page 2 - log data page: A SYNC log record is written
|
||||
* into this page at logform time;
|
||||
* into this page at logform time;
|
||||
* pages 3-N - log data page: set to empty log data pages;
|
||||
*/
|
||||
/*
|
||||
* init log superblock: log page 1
|
||||
* init log superblock: log page 1
|
||||
*/
|
||||
logsuper = (struct logsuper *) bp->l_ldata;
|
||||
|
||||
@@ -2436,7 +2442,7 @@ int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize)
|
||||
goto exit;
|
||||
|
||||
/*
|
||||
* init pages 2 to npages-1 as log data pages:
|
||||
* init pages 2 to npages-1 as log data pages:
|
||||
*
|
||||
* log page sequence number (lpsn) initialization:
|
||||
*
|
||||
@@ -2479,7 +2485,7 @@ int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize)
|
||||
goto exit;
|
||||
|
||||
/*
|
||||
* initialize succeeding log pages: lpsn = 0, 1, ..., (N-2)
|
||||
* initialize succeeding log pages: lpsn = 0, 1, ..., (N-2)
|
||||
*/
|
||||
for (lspn = 0; lspn < npages - 3; lspn++) {
|
||||
lp->h.page = lp->t.page = cpu_to_le32(lspn);
|
||||
@@ -2495,7 +2501,7 @@ int lmLogFormat(struct jfs_log *log, s64 logAddress, int logSize)
|
||||
rc = 0;
|
||||
exit:
|
||||
/*
|
||||
* finalize log
|
||||
* finalize log
|
||||
*/
|
||||
/* release the buffer */
|
||||
lbmFree(bp);
|
||||
|
||||
+13
-13
@@ -144,7 +144,7 @@ struct logpage {
|
||||
*
|
||||
* (this comment should be rewritten !)
|
||||
* jfs uses only "after" log records (only a single writer is allowed
|
||||
* in a page, pages are written to temporary paging space if
|
||||
* in a page, pages are written to temporary paging space if
|
||||
* if they must be written to disk before commit, and i/o is
|
||||
* scheduled for modified pages to their home location after
|
||||
* the log records containing the after values and the commit
|
||||
@@ -153,7 +153,7 @@ struct logpage {
|
||||
*
|
||||
* a log record consists of a data area of variable length followed by
|
||||
* a descriptor of fixed size LOGRDSIZE bytes.
|
||||
* the data area is rounded up to an integral number of 4-bytes and
|
||||
* the data area is rounded up to an integral number of 4-bytes and
|
||||
* must be no longer than LOGPSIZE.
|
||||
* the descriptor is of size of multiple of 4-bytes and aligned on a
|
||||
* 4-byte boundary.
|
||||
@@ -215,13 +215,13 @@ struct lrd {
|
||||
union {
|
||||
|
||||
/*
|
||||
* COMMIT: commit
|
||||
* COMMIT: commit
|
||||
*
|
||||
* transaction commit: no type-dependent information;
|
||||
*/
|
||||
|
||||
/*
|
||||
* REDOPAGE: after-image
|
||||
* REDOPAGE: after-image
|
||||
*
|
||||
* apply after-image;
|
||||
*
|
||||
@@ -236,7 +236,7 @@ struct lrd {
|
||||
} redopage; /* (20) */
|
||||
|
||||
/*
|
||||
* NOREDOPAGE: the page is freed
|
||||
* NOREDOPAGE: the page is freed
|
||||
*
|
||||
* do not apply after-image records which precede this record
|
||||
* in the log with the same page block number to this page.
|
||||
@@ -252,7 +252,7 @@ struct lrd {
|
||||
} noredopage; /* (20) */
|
||||
|
||||
/*
|
||||
* UPDATEMAP: update block allocation map
|
||||
* UPDATEMAP: update block allocation map
|
||||
*
|
||||
* either in-line PXD,
|
||||
* or out-of-line XADLIST;
|
||||
@@ -268,7 +268,7 @@ struct lrd {
|
||||
} updatemap; /* (20) */
|
||||
|
||||
/*
|
||||
* NOREDOINOEXT: the inode extent is freed
|
||||
* NOREDOINOEXT: the inode extent is freed
|
||||
*
|
||||
* do not apply after-image records which precede this
|
||||
* record in the log with the any of the 4 page block
|
||||
@@ -286,7 +286,7 @@ struct lrd {
|
||||
} noredoinoext; /* (20) */
|
||||
|
||||
/*
|
||||
* SYNCPT: log sync point
|
||||
* SYNCPT: log sync point
|
||||
*
|
||||
* replay log upto syncpt address specified;
|
||||
*/
|
||||
@@ -295,13 +295,13 @@ struct lrd {
|
||||
} syncpt;
|
||||
|
||||
/*
|
||||
* MOUNT: file system mount
|
||||
* MOUNT: file system mount
|
||||
*
|
||||
* file system mount: no type-dependent information;
|
||||
*/
|
||||
|
||||
/*
|
||||
* ? FREEXTENT: free specified extent(s)
|
||||
* ? FREEXTENT: free specified extent(s)
|
||||
*
|
||||
* free specified extent(s) from block allocation map
|
||||
* N.B.: nextents should be length of data/sizeof(xad_t)
|
||||
@@ -314,7 +314,7 @@ struct lrd {
|
||||
} freextent;
|
||||
|
||||
/*
|
||||
* ? NOREDOFILE: this file is freed
|
||||
* ? NOREDOFILE: this file is freed
|
||||
*
|
||||
* do not apply records which precede this record in the log
|
||||
* with the same inode number.
|
||||
@@ -330,7 +330,7 @@ struct lrd {
|
||||
} noredofile;
|
||||
|
||||
/*
|
||||
* ? NEWPAGE:
|
||||
* ? NEWPAGE:
|
||||
*
|
||||
* metadata type dependent
|
||||
*/
|
||||
@@ -342,7 +342,7 @@ struct lrd {
|
||||
} newpage;
|
||||
|
||||
/*
|
||||
* ? DUMMY: filler
|
||||
* ? DUMMY: filler
|
||||
*
|
||||
* no type-dependent information
|
||||
*/
|
||||
|
||||
@@ -472,7 +472,8 @@ add_failed:
|
||||
printk(KERN_ERR "JFS: bio_add_page failed unexpectedly\n");
|
||||
goto skip;
|
||||
dump_bio:
|
||||
dump_mem("bio", bio, sizeof(*bio));
|
||||
print_hex_dump(KERN_ERR, "JFS: dump of bio: ", DUMP_PREFIX_ADDRESS, 16,
|
||||
4, bio, sizeof(*bio), 0);
|
||||
skip:
|
||||
bio_put(bio);
|
||||
unlock_page(page);
|
||||
|
||||
+3
-3
@@ -80,7 +80,7 @@ static int logMOUNT(struct super_block *sb);
|
||||
*/
|
||||
int jfs_mount(struct super_block *sb)
|
||||
{
|
||||
int rc = 0; /* Return code */
|
||||
int rc = 0; /* Return code */
|
||||
struct jfs_sb_info *sbi = JFS_SBI(sb);
|
||||
struct inode *ipaimap = NULL;
|
||||
struct inode *ipaimap2 = NULL;
|
||||
@@ -169,7 +169,7 @@ int jfs_mount(struct super_block *sb)
|
||||
sbi->ipaimap2 = NULL;
|
||||
|
||||
/*
|
||||
* mount (the only/single) fileset
|
||||
* mount (the only/single) fileset
|
||||
*/
|
||||
/*
|
||||
* open fileset inode allocation map (aka fileset inode)
|
||||
@@ -195,7 +195,7 @@ int jfs_mount(struct super_block *sb)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* unwind on error
|
||||
* unwind on error
|
||||
*/
|
||||
errout41: /* close fileset inode allocation map inode */
|
||||
diFreeSpecial(ipimap);
|
||||
|
||||
+148
-144
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -94,7 +94,7 @@ extern struct tblock *TxBlock; /* transaction block table */
|
||||
*/
|
||||
struct tlock {
|
||||
lid_t next; /* 2: index next lockword on tid locklist
|
||||
* next lockword on freelist
|
||||
* next lockword on freelist
|
||||
*/
|
||||
tid_t tid; /* 2: transaction id holding lock */
|
||||
|
||||
|
||||
+10
-10
@@ -21,7 +21,7 @@
|
||||
/*
|
||||
* jfs_types.h:
|
||||
*
|
||||
* basic type/utility definitions
|
||||
* basic type/utility definitions
|
||||
*
|
||||
* note: this header file must be the 1st include file
|
||||
* of JFS include list in all JFS .c file.
|
||||
@@ -54,8 +54,8 @@ struct timestruc_t {
|
||||
*/
|
||||
|
||||
#define LEFTMOSTONE 0x80000000
|
||||
#define HIGHORDER 0x80000000u /* high order bit on */
|
||||
#define ONES 0xffffffffu /* all bit on */
|
||||
#define HIGHORDER 0x80000000u /* high order bit on */
|
||||
#define ONES 0xffffffffu /* all bit on */
|
||||
|
||||
/*
|
||||
* logical xd (lxd)
|
||||
@@ -148,7 +148,7 @@ typedef struct {
|
||||
#define sizeDXD(dxd) le32_to_cpu((dxd)->size)
|
||||
|
||||
/*
|
||||
* directory entry argument
|
||||
* directory entry argument
|
||||
*/
|
||||
struct component_name {
|
||||
int namlen;
|
||||
@@ -160,14 +160,14 @@ struct component_name {
|
||||
* DASD limit information - stored in directory inode
|
||||
*/
|
||||
struct dasd {
|
||||
u8 thresh; /* Alert Threshold (in percent) */
|
||||
u8 delta; /* Alert Threshold delta (in percent) */
|
||||
u8 thresh; /* Alert Threshold (in percent) */
|
||||
u8 delta; /* Alert Threshold delta (in percent) */
|
||||
u8 rsrvd1;
|
||||
u8 limit_hi; /* DASD limit (in logical blocks) */
|
||||
__le32 limit_lo; /* DASD limit (in logical blocks) */
|
||||
u8 limit_hi; /* DASD limit (in logical blocks) */
|
||||
__le32 limit_lo; /* DASD limit (in logical blocks) */
|
||||
u8 rsrvd2[3];
|
||||
u8 used_hi; /* DASD usage (in logical blocks) */
|
||||
__le32 used_lo; /* DASD usage (in logical blocks) */
|
||||
u8 used_hi; /* DASD usage (in logical blocks) */
|
||||
__le32 used_lo; /* DASD usage (in logical blocks) */
|
||||
};
|
||||
|
||||
#define DASDLIMIT(dasdp) \
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user