patch-2.4.27 linux-2.4.27/fs/jfs/jfs_xtree.c
Next file: linux-2.4.27/fs/jfs/namei.c
Previous file: linux-2.4.27/fs/jfs/jfs_types.h
Back to the patch index
Back to the overall index
- Lines: 65
- Date:
2004-08-07 16:26:06.005402290 -0700
- Orig file:
linux-2.4.26/fs/jfs/jfs_xtree.c
- Orig date:
2004-04-14 06:05:40.000000000 -0700
diff -urN linux-2.4.26/fs/jfs/jfs_xtree.c linux-2.4.27/fs/jfs/jfs_xtree.c
@@ -1071,8 +1071,10 @@
*/
/* 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,
@@ -1106,8 +1108,10 @@
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 */
@@ -1170,19 +1174,6 @@
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;
}
@@ -3504,7 +3495,17 @@
* 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;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)