patch-2.4.26 linux-2.4.26/fs/jfs/jfs_txnmgr.c
Next file: linux-2.4.26/fs/jfs/jfs_unicode.c
Previous file: linux-2.4.26/fs/jfs/jfs_metapage.c
Back to the patch index
Back to the overall index
- Lines: 149
- Date:
2004-04-14 06:05:40.000000000 -0700
- Orig file:
linux-2.4.25/fs/jfs/jfs_txnmgr.c
- Orig date:
2004-02-18 05:36:31.000000000 -0800
diff -urN linux-2.4.25/fs/jfs/jfs_txnmgr.c linux-2.4.26/fs/jfs/jfs_txnmgr.c
@@ -167,25 +167,23 @@
/*
* forward references
*/
-int diLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
- struct tlock * tlck, struct commit * cd);
-int dataLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
- struct tlock * tlck);
-void dtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
- struct tlock * tlck);
-void inlineLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
- struct tlock * tlck);
-void mapLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
- struct tlock * tlck);
+static int diLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+ struct tlock * tlck, struct commit * cd);
+static int dataLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+ struct tlock * tlck);
+static void dtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+ 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);
-void txForce(struct tblock * tblk);
-static int txLog(struct jfs_log * log, struct tblock * tblk, struct commit * cd);
-int txMoreLock(void);
+ struct tblock * tblk);
+static void txForce(struct tblock * tblk);
+static int txLog(struct jfs_log * log, struct tblock * tblk,
+ struct commit * cd);
static void txUpdateMap(struct tblock * tblk);
static void txRelease(struct tblock * tblk);
-void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct tlock * tlck);
static void LogSyncRelease(struct metapage * mp);
@@ -1338,9 +1336,6 @@
lrd->log.redopage.fileset = cpu_to_le32(JFS_IP(ip)->fileset);
lrd->log.redopage.inode = cpu_to_le32(ip->i_ino);
- if (tlck->mp)
- hold_metapage(tlck->mp, 0);
-
/* write log record of page from the tlock */
switch (tlck->type & tlckTYPE) {
case tlckXTREE:
@@ -1366,8 +1361,6 @@
default:
jfs_err("UFO tlock:0x%p", tlck);
}
- if (tlck->mp)
- release_metapage(tlck->mp);
}
return rc;
@@ -1379,7 +1372,7 @@
*
* function: log inode tlock and format maplock to update bmap;
*/
-int diLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+static int diLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct tlock * tlck, struct commit * cd)
{
int rc = 0;
@@ -1494,7 +1487,7 @@
*
* function: log data tlock
*/
-int dataLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+static int dataLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct tlock * tlck)
{
struct metapage *mp;
@@ -1517,6 +1510,7 @@
* the last entry, so don't bother logging this
*/
mp->lid = 0;
+ hold_metapage(mp, 0);
atomic_dec(&mp->nohomeok);
discard_metapage(mp);
tlck->mp = 0;
@@ -1540,7 +1534,7 @@
*
* function: log dtree tlock and format maplock to update bmap;
*/
-void dtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+static void dtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct tlock * tlck)
{
struct metapage *mp;
@@ -1645,7 +1639,7 @@
*
* function: log xtree tlock and format maplock to update bmap;
*/
-void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
+static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
struct tlock * tlck)
{
struct inode *ip;
@@ -2705,7 +2699,7 @@
* allocation maps are updated in order. For synchronous transactions,
* let the user thread finish processing after txUpdateMap() is called.
*/
-void txLazyCommit(struct tblock * tblk)
+static void txLazyCommit(struct tblock * tblk)
{
struct jfs_log *log;
@@ -2987,11 +2981,12 @@
anon_inode_list);
ip = jfs_ip->inode;
- /*
- * down_trylock returns 0 on success. This is
- * inconsistent with spin_trylock.
- */
- if (! down_trylock(&jfs_ip->commit_sem)) {
+ if (! igrab(ip)) {
+ /*
+ * Inode is being freed
+ */
+ list_del_init(&jfs_ip->anon_inode_list);
+ } else if (! down_trylock(&jfs_ip->commit_sem)) {
/*
* inode will be removed from anonymous list
* when it is committed
@@ -3001,6 +2996,8 @@
rc = txCommit(tid, 1, &ip, 0);
txEnd(tid);
up(&jfs_ip->commit_sem);
+
+ iput(ip);
/*
* Just to be safe. I don't know how
* long we can run without blocking
@@ -3020,6 +3017,10 @@
/* Put on anon_list2 */
list_add(&jfs_ip->anon_inode_list,
&TxAnchor.anon_list2);
+
+ TXN_UNLOCK();
+ iput(ip);
+ TXN_LOCK();
}
}
/* Add anon_list2 back to anon_list */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)