@ -1712,7 +1712,7 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct maplock * maplock ;
struct xdlistlock * xadlock ;
struct pxd_lock * pxdlock ;
pxd_t * pxd ;
pxd_t * page_p xd ;
int next , lwm , hwm ;
ip = tlck - > ip ;
@ -1722,7 +1722,7 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
lrd - > log . redopage . type = cpu_to_le16 ( LOG_XTREE ) ;
lrd - > log . redopage . l2linesize = cpu_to_le16 ( L2XTSLOTSIZE ) ;
pxd = & lrd - > log . redopage . pxd ;
page_p xd = & lrd - > log . redopage . pxd ;
if ( tlck - > type & tlckBTROOT ) {
lrd - > log . redopage . type | = cpu_to_le16 ( LOG_BTROOT ) ;
@ -1752,9 +1752,9 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
* applying the after - image to the meta - data page .
*/
lrd - > type = cpu_to_le16 ( LOG_REDOPAGE ) ;
// *pxd = mp->cm_pxd;
PXDaddress ( pxd , mp - > index ) ;
PXDlength ( pxd ,
// *page_p xd = mp->cm_pxd;
PXDaddress ( page_p xd , mp - > index ) ;
PXDlength ( page_p xd ,
mp - > logical_size > > tblk - > sb - > s_blocksize_bits ) ;
lrd - > backchain = cpu_to_le32 ( lmLog ( log , tblk , lrd , tlck ) ) ;
@ -1776,25 +1776,31 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
tlck - > flag | = tlckUPDATEMAP ;
xadlock - > flag = mlckALLOCXADLIST ;
xadlock - > count = next - lwm ;
if ( ( xadlock - > count < = 2 ) & & ( tblk - > xflag & COMMIT_LAZY ) ) {
if ( ( xadlock - > count < = 4 ) & & ( tblk - > xflag & COMMIT_LAZY ) ) {
int i ;
pxd_t * pxd ;
/*
* Lazy commit may allow xtree to be modified before
* txUpdateMap runs . Copy xad into linelock to
* preserve correct data .
*
* We can fit twice as may pxd ' s as xads in the lock
*/
xadlock - > xdlist = & xtlck - > pxdlock ;
memcpy ( xadlock - > xdlist , & p - > xad [ lwm ] ,
sizeof ( xad_t ) * xadlock - > count ) ;
for ( i = 0 ; i < xadlock - > count ; i + + )
xadlock - > flag = mlckALLOCPXDLIST ;
pxd = xadlock - > xdlist = & xtlck - > pxdlock ;
for ( i = 0 ; i < xadlock - > count ; i + + ) {
PXDaddress ( pxd , addressXAD ( & p - > xad [ lwm + i ] ) ) ;
PXDlength ( pxd , lengthXAD ( & p - > xad [ lwm + i ] ) ) ;
p - > xad [ lwm + i ] . flag & =
~ ( XAD_NEW | XAD_EXTENDED ) ;
pxd + + ;
}
} else {
/*
* xdlist will point to into inode ' s xtree , ensure
* that transaction is not committed lazily .
*/
xadlock - > flag = mlckALLOCXADLIST ;
xadlock - > xdlist = & p - > xad [ lwm ] ;
tblk - > xflag & = ~ COMMIT_LAZY ;
}
@ -1836,8 +1842,8 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
if ( tblk - > xflag & COMMIT_TRUNCATE ) {
/* write NOREDOPAGE for the page */
lrd - > type = cpu_to_le16 ( LOG_NOREDOPAGE ) ;
PXDaddress ( pxd , mp - > index ) ;
PXDlength ( pxd ,
PXDaddress ( page_p xd , mp - > index ) ;
PXDlength ( page_p xd ,
mp - > logical_size > > tblk - > sb - >
s_blocksize_bits ) ;
lrd - > backchain =
@ -1872,22 +1878,32 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
* deleted page itself ;
*/
tlck - > flag | = tlckUPDATEMAP ;
xadlock - > flag = mlckFREEXADLIST ;
xadlock - > count = hwm - XTENTRYSTART + 1 ;
if ( ( xadlock - > count < = 2 ) & & ( tblk - > xflag & COMMIT_LAZY ) ) {
if ( ( xadlock - > count < = 4 ) & & ( tblk - > xflag & COMMIT_LAZY ) ) {
int i ;
pxd_t * pxd ;
/*
* Lazy commit may allow xtree to be modified before
* txUpdateMap runs . Copy xad into linelock to
* preserve correct data .
*
* We can fit twice as may pxd ' s as xads in the lock
*/
xadlock - > xdlist = & xtlck - > pxdlock ;
memcpy ( xadlock - > xdlist , & p - > xad [ XTENTRYSTART ] ,
sizeof ( xad_t ) * xadlock - > count ) ;
xadlock - > flag = mlckFREEPXDLIST ;
pxd = xadlock - > xdlist = & xtlck - > pxdlock ;
for ( i = 0 ; i < xadlock - > count ; i + + ) {
PXDaddress ( pxd ,
addressXAD ( & p - > xad [ XTENTRYSTART + i ] ) ) ;
PXDlength ( pxd ,
lengthXAD ( & p - > xad [ XTENTRYSTART + i ] ) ) ;
pxd + + ;
}
} else {
/*
* xdlist will point to into inode ' s xtree , ensure
* that transaction is not committed lazily .
*/
xadlock - > flag = mlckFREEXADLIST ;
xadlock - > xdlist = & p - > xad [ XTENTRYSTART ] ;
tblk - > xflag & = ~ COMMIT_LAZY ;
}
@ -1918,7 +1934,7 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
* header ?
*/
if ( tlck - > type & tlckTRUNCATE ) {
pxd_t t pxd; /* truncated extent of xad */
pxd_t pxd ; /* truncated extent of xad */
int twm ;
/*
@ -1947,8 +1963,9 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
* applying the after - image to the meta - data page .
*/
lrd - > type = cpu_to_le16 ( LOG_REDOPAGE ) ;
PXDaddress ( pxd , mp - > index ) ;
PXDlength ( pxd , mp - > logical_size > > tblk - > sb - > s_blocksize_bits ) ;
PXDaddress ( page_pxd , mp - > index ) ;
PXDlength ( page_pxd ,
mp - > logical_size > > tblk - > sb - > s_blocksize_bits ) ;
lrd - > backchain = cpu_to_le32 ( lmLog ( log , tblk , lrd , tlck ) ) ;
/*
@ -1966,7 +1983,7 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
lrd - > log . updatemap . type = cpu_to_le16 ( LOG_FREEPXD ) ;
lrd - > log . updatemap . nxd = cpu_to_le16 ( 1 ) ;
lrd - > log . updatemap . pxd = pxdlock - > pxd ;
t pxd = pxdlock - > pxd ; /* save to format maplock */
pxd = pxdlock - > pxd ; /* save to format maplock */
lrd - > backchain =
cpu_to_le32 ( lmLog ( log , tblk , lrd , NULL ) ) ;
}
@ -2035,7 +2052,7 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
pxdlock = ( struct pxd_lock * ) xadlock ;
pxdlock - > flag = mlckFREEPXD ;
pxdlock - > count = 1 ;
pxdlock - > pxd = t pxd;
pxdlock - > pxd = pxd ;
jfs_info ( " xtLog: truncate ip:0x%p mp:0x%p count:%d "
" hwm:%d " , ip , mp , pxdlock - > count , hwm ) ;