Loading fs/jfs/jfs_dmap.c +14 −6 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ static void dbAllocBits(struct bmap * bmp, struct dmap * dp, s64 blkno, int nblocks); static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval); static void dbBackSplit(dmtree_t * tp, int leafno); static int dbBackSplit(dmtree_t * tp, int leafno); static int dbJoin(dmtree_t * tp, int leafno, int newval); static void dbAdjTree(dmtree_t * tp, int leafno, int newval); static int dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, Loading Loading @@ -305,7 +305,6 @@ int dbSync(struct inode *ipbmap) filemap_fdatawrite(ipbmap->i_mapping); filemap_fdatawait(ipbmap->i_mapping); ipbmap->i_state |= I_DIRTY; diWriteSpecial(ipbmap, 0); return (0); Loading Loading @@ -2467,7 +2466,9 @@ dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level) * that it is at the front of a binary buddy system. */ if (oldval == NOFREE) { dbBackSplit((dmtree_t *) dcp, leafno); rc = dbBackSplit((dmtree_t *) dcp, leafno); if (rc) return rc; oldval = dcp->stree[ti]; } dbSplit((dmtree_t *) dcp, leafno, dcp->budmin, newval); Loading Loading @@ -2627,7 +2628,7 @@ static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval) * * serialization: IREAD_LOCK(ipbmap) or IWRITE_LOCK(ipbmap) held on entry/exit; */ static void dbBackSplit(dmtree_t * tp, int leafno) static int dbBackSplit(dmtree_t * tp, int leafno) { int budsz, bud, w, bsz, size; int cursz; Loading Loading @@ -2662,7 +2663,10 @@ static void dbBackSplit(dmtree_t * tp, int leafno) */ for (w = leafno, bsz = budsz;; bsz <<= 1, w = (w < bud) ? w : bud) { assert(bsz < le32_to_cpu(tp->dmt_nleafs)); if (bsz >= le32_to_cpu(tp->dmt_nleafs)) { jfs_err("JFS: block map error in dbBackSplit"); return -EIO; } /* determine the buddy. */ Loading @@ -2681,7 +2685,11 @@ static void dbBackSplit(dmtree_t * tp, int leafno) } } assert(leaf[leafno] == size); if (leaf[leafno] != size) { jfs_err("JFS: wrong leaf value in dbBackSplit"); return -EIO; } return 0; } Loading fs/jfs/jfs_imap.c +8 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,12 @@ #include "jfs_superblock.h" #include "jfs_debug.h" /* * __mark_inode_dirty expects inodes to be hashed. Since we don't want * special inodes in the fileset inode space, we hash them to a dummy head */ static HLIST_HEAD(aggregate_hash); /* * imap locks */ Loading Loading @@ -491,6 +497,8 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) /* release the page */ release_metapage(mp); hlist_add_head(&ip->i_hash, &aggregate_hash); return (ip); } Loading @@ -514,8 +522,6 @@ void diWriteSpecial(struct inode *ip, int secondary) ino_t inum = ip->i_ino; struct metapage *mp; ip->i_state &= ~I_DIRTY; if (secondary) address = addressPXD(&sbi->ait2) >> sbi->l2nbperpage; else Loading fs/jfs/jfs_metapage.c +6 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,12 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc) if (mp->nohomeok && !test_bit(META_forcewrite, &mp->flag)) { redirty = 1; /* * Make sure this page isn't blocked indefinitely. * If the journal isn't undergoing I/O, push it */ if (mp->log && !(mp->log->cflag & logGC_PAGEOUT)) jfs_flush_journal(mp->log, 0); continue; } Loading fs/jfs/jfs_txnmgr.c +0 −2 Original line number Diff line number Diff line Loading @@ -2396,7 +2396,6 @@ static void txUpdateMap(struct tblock * tblk) */ if (tblk->xflag & COMMIT_CREATE) { diUpdatePMap(ipimap, tblk->ino, FALSE, tblk); ipimap->i_state |= I_DIRTY; /* update persistent block allocation map * for the allocation of inode extent; */ Loading @@ -2407,7 +2406,6 @@ static void txUpdateMap(struct tblock * tblk) } else if (tblk->xflag & COMMIT_DELETE) { ip = tblk->u.ip; diUpdatePMap(ipimap, ip->i_ino, TRUE, tblk); ipimap->i_state |= I_DIRTY; iput(ip); } } Loading fs/jfs/jfs_xtree.c +9 −9 Original line number Diff line number Diff line Loading @@ -3516,16 +3516,10 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag) /* process entries backward from last index */ index = le16_to_cpu(p->header.nextindex) - 1; if (p->header.flag & BT_INTERNAL) goto getChild; /* * leaf page */ /* Since this is the rightmost leaf, and we may have already freed * a page that was formerly to the right, let's make sure that the * next pointer is zero. /* Since this is the rightmost page at this level, and we may have * already freed a page that was formerly to the right, let's make * sure that the next pointer is zero. */ if (p->header.next) { if (log) Loading @@ -3539,6 +3533,12 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag) p->header.next = 0; } if (p->header.flag & BT_INTERNAL) goto getChild; /* * leaf page */ freed = 0; /* does region covered by leaf page precede Teof ? */ Loading Loading
fs/jfs/jfs_dmap.c +14 −6 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ static void dbAllocBits(struct bmap * bmp, struct dmap * dp, s64 blkno, int nblocks); static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval); static void dbBackSplit(dmtree_t * tp, int leafno); static int dbBackSplit(dmtree_t * tp, int leafno); static int dbJoin(dmtree_t * tp, int leafno, int newval); static void dbAdjTree(dmtree_t * tp, int leafno, int newval); static int dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, Loading Loading @@ -305,7 +305,6 @@ int dbSync(struct inode *ipbmap) filemap_fdatawrite(ipbmap->i_mapping); filemap_fdatawait(ipbmap->i_mapping); ipbmap->i_state |= I_DIRTY; diWriteSpecial(ipbmap, 0); return (0); Loading Loading @@ -2467,7 +2466,9 @@ dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level) * that it is at the front of a binary buddy system. */ if (oldval == NOFREE) { dbBackSplit((dmtree_t *) dcp, leafno); rc = dbBackSplit((dmtree_t *) dcp, leafno); if (rc) return rc; oldval = dcp->stree[ti]; } dbSplit((dmtree_t *) dcp, leafno, dcp->budmin, newval); Loading Loading @@ -2627,7 +2628,7 @@ static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval) * * serialization: IREAD_LOCK(ipbmap) or IWRITE_LOCK(ipbmap) held on entry/exit; */ static void dbBackSplit(dmtree_t * tp, int leafno) static int dbBackSplit(dmtree_t * tp, int leafno) { int budsz, bud, w, bsz, size; int cursz; Loading Loading @@ -2662,7 +2663,10 @@ static void dbBackSplit(dmtree_t * tp, int leafno) */ for (w = leafno, bsz = budsz;; bsz <<= 1, w = (w < bud) ? w : bud) { assert(bsz < le32_to_cpu(tp->dmt_nleafs)); if (bsz >= le32_to_cpu(tp->dmt_nleafs)) { jfs_err("JFS: block map error in dbBackSplit"); return -EIO; } /* determine the buddy. */ Loading @@ -2681,7 +2685,11 @@ static void dbBackSplit(dmtree_t * tp, int leafno) } } assert(leaf[leafno] == size); if (leaf[leafno] != size) { jfs_err("JFS: wrong leaf value in dbBackSplit"); return -EIO; } return 0; } Loading
fs/jfs/jfs_imap.c +8 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,12 @@ #include "jfs_superblock.h" #include "jfs_debug.h" /* * __mark_inode_dirty expects inodes to be hashed. Since we don't want * special inodes in the fileset inode space, we hash them to a dummy head */ static HLIST_HEAD(aggregate_hash); /* * imap locks */ Loading Loading @@ -491,6 +497,8 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) /* release the page */ release_metapage(mp); hlist_add_head(&ip->i_hash, &aggregate_hash); return (ip); } Loading @@ -514,8 +522,6 @@ void diWriteSpecial(struct inode *ip, int secondary) ino_t inum = ip->i_ino; struct metapage *mp; ip->i_state &= ~I_DIRTY; if (secondary) address = addressPXD(&sbi->ait2) >> sbi->l2nbperpage; else Loading
fs/jfs/jfs_metapage.c +6 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,12 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc) if (mp->nohomeok && !test_bit(META_forcewrite, &mp->flag)) { redirty = 1; /* * Make sure this page isn't blocked indefinitely. * If the journal isn't undergoing I/O, push it */ if (mp->log && !(mp->log->cflag & logGC_PAGEOUT)) jfs_flush_journal(mp->log, 0); continue; } Loading
fs/jfs/jfs_txnmgr.c +0 −2 Original line number Diff line number Diff line Loading @@ -2396,7 +2396,6 @@ static void txUpdateMap(struct tblock * tblk) */ if (tblk->xflag & COMMIT_CREATE) { diUpdatePMap(ipimap, tblk->ino, FALSE, tblk); ipimap->i_state |= I_DIRTY; /* update persistent block allocation map * for the allocation of inode extent; */ Loading @@ -2407,7 +2406,6 @@ static void txUpdateMap(struct tblock * tblk) } else if (tblk->xflag & COMMIT_DELETE) { ip = tblk->u.ip; diUpdatePMap(ipimap, ip->i_ino, TRUE, tblk); ipimap->i_state |= I_DIRTY; iput(ip); } } Loading
fs/jfs/jfs_xtree.c +9 −9 Original line number Diff line number Diff line Loading @@ -3516,16 +3516,10 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag) /* process entries backward from last index */ index = le16_to_cpu(p->header.nextindex) - 1; if (p->header.flag & BT_INTERNAL) goto getChild; /* * leaf page */ /* Since this is the rightmost leaf, and we may have already freed * a page that was formerly to the right, let's make sure that the * next pointer is zero. /* Since this is the rightmost page at this level, and we may have * already freed a page that was formerly to the right, let's make * sure that the next pointer is zero. */ if (p->header.next) { if (log) Loading @@ -3539,6 +3533,12 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag) p->header.next = 0; } if (p->header.flag & BT_INTERNAL) goto getChild; /* * leaf page */ freed = 0; /* does region covered by leaf page precede Teof ? */ Loading