git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git]
/
fs
/
jfs
/
jfs_xtree.c
diff --git
a/fs/jfs/jfs_xtree.c
b/fs/jfs/jfs_xtree.c
index
fab2bbc
..
19913fc
100644
(file)
--- a/
fs/jfs/jfs_xtree.c
+++ b/
fs/jfs/jfs_xtree.c
@@
-1071,8
+1071,10
@@
xtSplitUp(tid_t tid,
*/
/* get/pin the parent page <sp> */
XT_GETPAGE(ip, parent->bn, smp, PSIZE, sp, rc);
*/
/* get/pin the parent page <sp> */
XT_GETPAGE(ip, parent->bn, smp, PSIZE, sp, rc);
- if (rc)
- goto errout2;
+ if (rc) {
+ XT_PUTPAGE(rcmp);
+ return rc;
+ }
/*
* The new key entry goes ONE AFTER the index of parent entry,
/*
* The new key entry goes ONE AFTER the index of parent entry,
@@
-1106,8
+1108,10
@@
xtSplitUp(tid_t tid,
rc = (sp->header.flag & BT_ROOT) ?
xtSplitRoot(tid, ip, split, &rmp) :
xtSplitPage(tid, ip, split, &rmp, &rbn);
rc = (sp->header.flag & BT_ROOT) ?
xtSplitRoot(tid, ip, split, &rmp) :
xtSplitPage(tid, ip, split, &rmp, &rbn);
- if (rc)
- goto errout1;
+ if (rc) {
+ XT_PUTPAGE(smp);
+ return rc;
+ }
XT_PUTPAGE(smp);
/* keep new child page <rp> pinned */
XT_PUTPAGE(smp);
/* keep new child page <rp> pinned */
@@
-1170,19
+1174,6
@@
xtSplitUp(tid_t tid,
XT_PUTPAGE(rmp);
return 0;
XT_PUTPAGE(rmp);
return 0;
-
- /*
- * If something fails in the above loop we were already walking back
- * up the tree and the tree is now inconsistent.
- * release all pages we're holding.
- */
- errout1:
- XT_PUTPAGE(smp);
-
- errout2:
- XT_PUTPAGE(rcmp);
-
- return rc;
}
}
@@
-1222,7
+1213,7
@@
xtSplitPage(tid_t tid, struct inode *ip,
struct pxdlist *pxdlist;
pxd_t *pxd;
struct tlock *tlck;
struct pxdlist *pxdlist;
pxd_t *pxd;
struct tlock *tlck;
- struct xtlock *sxtlck =
0, *rxtlck = 0
;
+ struct xtlock *sxtlck =
NULL, *rxtlck = NULL
;
smp = split->mp;
sp = XT_PAGE(ip, smp);
smp = split->mp;
sp = XT_PAGE(ip, smp);
@@
-1603,7
+1594,7
@@
int xtExtend(tid_t tid, /* transaction id */
xad_t *xad;
s64 xaddr;
struct tlock *tlck;
xad_t *xad;
s64 xaddr;
struct tlock *tlck;
- struct xtlock *xtlck =
0
;
+ struct xtlock *xtlck =
NULL
;
int rootsplit = 0;
jfs_info("xtExtend: nxoff:0x%lx nxlen:0x%x", (ulong) xoff, xlen);
int rootsplit = 0;
jfs_info("xtExtend: nxoff:0x%lx nxlen:0x%x", (ulong) xoff, xlen);
@@
-1957,7
+1948,7
@@
int xtUpdate(tid_t tid, struct inode *ip, xad_t * nxad)
int nxlen, xlen, lxlen, rxlen;
s64 nxaddr, xaddr;
struct tlock *tlck;
int nxlen, xlen, lxlen, rxlen;
s64 nxaddr, xaddr;
struct tlock *tlck;
- struct xtlock *xtlck =
0
;
+ struct xtlock *xtlck =
NULL
;
int rootsplit = 0, newpage = 0;
/* there must exist extent to be tailgated */
int rootsplit = 0, newpage = 0;
/* there must exist extent to be tailgated */
@@
-3416,9
+3407,9
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
int xlen, len, freexlen;
struct btstack btstack;
struct btframe *parent;
int xlen, len, freexlen;
struct btstack btstack;
struct btframe *parent;
- struct tblock *tblk =
0
;
- struct tlock *tlck =
0
;
- struct xtlock *xtlck =
0
;
+ struct tblock *tblk =
NULL
;
+ struct tlock *tlck =
NULL
;
+ struct xtlock *xtlck =
NULL
;
struct xdlistlock xadlock; /* maplock for COMMIT_WMAP */
struct pxd_lock *pxdlock; /* maplock for COMMIT_WMAP */
s64 nfreed;
struct xdlistlock xadlock; /* maplock for COMMIT_WMAP */
struct pxd_lock *pxdlock; /* maplock for COMMIT_WMAP */
s64 nfreed;
@@
-3504,7
+3495,17
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
* a page that was formerly to the right, let's make sure that the
* next pointer is zero.
*/
* a page that was formerly to the right, let's make sure that the
* next pointer is zero.
*/
- p->header.next = 0;
+ if (p->header.next) {
+ if (log)
+ /*
+ * Make sure this change to the header is logged.
+ * If we really truncate this leaf, the flag
+ * will be changed to tlckTRUNCATE
+ */
+ tlck = txLock(tid, ip, mp, tlckXTREE|tlckGROW);
+ BT_MARK_DIRTY(mp, ip);
+ p->header.next = 0;
+ }
freed = 0;
freed = 0;
@@
-3614,7
+3615,7
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
pxdlock->flag = mlckFREEPXD;
PXDaddress(&pxdlock->pxd, xaddr);
PXDlength(&pxdlock->pxd, freexlen);
pxdlock->flag = mlckFREEPXD;
PXDaddress(&pxdlock->pxd, xaddr);
PXDlength(&pxdlock->pxd, freexlen);
- txFreeMap(ip, pxdlock,
0
, COMMIT_WMAP);
+ txFreeMap(ip, pxdlock,
NULL
, COMMIT_WMAP);
/* reset map lock */
xadlock.flag = mlckFREEXADLIST;
/* reset map lock */
xadlock.flag = mlckFREEXADLIST;
@@
-3642,8
+3643,8
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
xadlock.count =
le16_to_cpu(p->header.nextindex) -
nextindex;
xadlock.count =
le16_to_cpu(p->header.nextindex) -
nextindex;
- txFreeMap(ip, (struct maplock *) & xadlock,
0,
- COMMIT_WMAP);
+ txFreeMap(ip, (struct maplock *) & xadlock,
+
NULL,
COMMIT_WMAP);
}
p->header.nextindex = cpu_to_le16(nextindex);
}
}
p->header.nextindex = cpu_to_le16(nextindex);
}
@@
-3672,7
+3673,7
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
xadlock.xdlist = &p->xad[XTENTRYSTART];
xadlock.count =
le16_to_cpu(p->header.nextindex) - XTENTRYSTART;
xadlock.xdlist = &p->xad[XTENTRYSTART];
xadlock.count =
le16_to_cpu(p->header.nextindex) - XTENTRYSTART;
- txFreeMap(ip, (struct maplock *) & xadlock,
0
, COMMIT_WMAP);
+ txFreeMap(ip, (struct maplock *) & xadlock,
NULL
, COMMIT_WMAP);
}
if (p->header.flag & BT_ROOT) {
}
if (p->header.flag & BT_ROOT) {
@@
-3747,8
+3748,8
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
xadlock.count =
le16_to_cpu(p->header.nextindex) -
index - 1;
xadlock.count =
le16_to_cpu(p->header.nextindex) -
index - 1;
- txFreeMap(ip, (struct maplock *) & xadlock,
0,
- COMMIT_WMAP);
+ txFreeMap(ip, (struct maplock *) & xadlock,
+
NULL,
COMMIT_WMAP);
}
BT_MARK_DIRTY(mp, ip);
}
BT_MARK_DIRTY(mp, ip);
@@
-3819,7
+3820,7
@@
s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
xadlock.count =
le16_to_cpu(p->header.nextindex) -
XTENTRYSTART;
xadlock.count =
le16_to_cpu(p->header.nextindex) -
XTENTRYSTART;
- txFreeMap(ip, (struct maplock *) & xadlock,
0
,
+ txFreeMap(ip, (struct maplock *) & xadlock,
NULL
,
COMMIT_WMAP);
}
BT_MARK_DIRTY(mp, ip);
COMMIT_WMAP);
}
BT_MARK_DIRTY(mp, ip);
@@
-3956,11
+3957,11
@@
s64 xtTruncate_pmap(tid_t tid, struct inode *ip, s64 committed_size)
struct btframe *parent;
int rc;
struct tblock *tblk;
struct btframe *parent;
int rc;
struct tblock *tblk;
- struct tlock *tlck =
0
;
+ struct tlock *tlck =
NULL
;
xad_t *xad;
int xlen;
s64 xoff;
xad_t *xad;
int xlen;
s64 xoff;
- struct xtlock *xtlck =
0
;
+ struct xtlock *xtlck =
NULL
;
/* save object truncation type */
tblk = tid_to_tblock(tid);
/* save object truncation type */
tblk = tid_to_tblock(tid);