struct tlock * tlck);
static void mapLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct tlock * tlck);
-static void txAbortCommit(struct commit * cd);
static void txAllocPMap(struct inode *ip, struct maplock * maplock,
struct tblock * tblk);
static void txForce(struct tblock * tblk);
out:
if (rc != 0)
- txAbortCommit(&cd);
+ txAbort(tid, 1);
TheEnd:
jfs_info("txCommit: tid = %d, returning %d", tid, rc);
return;
}
-
-/*
- * txAbortCommit()
- *
- * function: abort commit.
- *
- * frees tlocks of transaction; line-locks and segment locks for all
- * segments in comdata structure. frees malloc storage
- * sets state of file-system to FM_MDIRTY in super-block.
- * log age of page-frames in memory for which caller has
- * are reset to 0 (to avoid logwarap).
- */
-static void txAbortCommit(struct commit * cd)
-{
- struct tblock *tblk;
- tid_t tid;
- lid_t lid, next;
- struct metapage *mp;
-
- jfs_warn("txAbortCommit: cd:0x%p", cd);
-
- /*
- * free tlocks of the transaction
- */
- tid = cd->tid;
- tblk = tid_to_tblock(tid);
- for (lid = tblk->next; lid; lid = next) {
- next = lid_to_tlock(lid)->next;
-
- mp = lid_to_tlock(lid)->mp;
- if (mp) {
- mp->lid = 0;
-
- /*
- * reset lsn of page to avoid logwarap;
- */
- if (mp->xflag & COMMIT_PAGE)
- LogSyncRelease(mp);
- }
-
- /* insert tlock at head of freelist */
- TXN_LOCK();
- txLockFree(lid);
- TXN_UNLOCK();
- }
-
- tblk->next = tblk->last = 0;
-
- /* free the transaction block */
- txEnd(tid);
-
- /*
- * mark filesystem dirty
- */
- jfs_error(cd->sb, "txAbortCommit");
-}
-
-
/*
* txLazyCommit(void)
*