patch-2.4.27 linux-2.4.27/fs/jfs/jfs_dmap.c
Next file: linux-2.4.27/fs/jfs/jfs_dtree.c
Previous file: linux-2.4.27/fs/jfs/jfs_debug.c
Back to the patch index
Back to the overall index
- Lines: 88
- Date:
2004-08-07 16:26:05.990401674 -0700
- Orig file:
linux-2.4.26/fs/jfs/jfs_dmap.c
- Orig date:
2004-04-14 06:05:40.000000000 -0700
diff -urN linux-2.4.26/fs/jfs/jfs_dmap.c linux-2.4.27/fs/jfs/jfs_dmap.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) International Business Machines Corp., 2000-2003
+ * Copyright (C) International Business Machines Corp., 2000-2004
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -382,7 +382,7 @@
IREAD_LOCK(ipbmap);
/* block to be freed better be within the mapsize. */
- if (unlikely(blkno + nblocks > bmp->db_mapsize)) {
+ if (unlikely((blkno == 0) || (blkno + nblocks > bmp->db_mapsize))) {
IREAD_UNLOCK(ipbmap);
printk(KERN_ERR "blkno = %Lx, nblocks = %Lx\n",
(unsigned long long) blkno,
@@ -1205,6 +1205,12 @@
s8 *leaf;
u32 mask;
+ if (dp->tree.leafidx != cpu_to_le32(LEAFIND)) {
+ jfs_error(bmp->db_ipbmap->i_sb,
+ "dbAllocNext: Corrupt dmap page");
+ return -EIO;
+ }
+
/* pick up a pointer to the leaves of the dmap tree.
*/
leaf = dp->tree.stree + le32_to_cpu(dp->tree.leafidx);
@@ -1328,7 +1334,15 @@
struct dmap * dp, s64 blkno, int nblocks, int l2nb, s64 * results)
{
int word, lword, rc;
- s8 *leaf = dp->tree.stree + le32_to_cpu(dp->tree.leafidx);
+ s8 *leaf;
+
+ if (dp->tree.leafidx != cpu_to_le32(LEAFIND)) {
+ jfs_error(bmp->db_ipbmap->i_sb,
+ "dbAllocNear: Corrupt dmap page");
+ return -EIO;
+ }
+
+ leaf = dp->tree.stree + le32_to_cpu(dp->tree.leafidx);
/* determine the word within the dmap that holds the hint
* (i.e. blkno). also, determine the last word in the dmap
@@ -1490,6 +1504,13 @@
dcp = (struct dmapctl *) mp->data;
budmin = dcp->budmin;
+ if (dcp->leafidx != cpu_to_le32(CTLLEAFIND)) {
+ jfs_error(bmp->db_ipbmap->i_sb,
+ "dbAllocAG: Corrupt dmapctl page");
+ release_metapage(mp);
+ return -EIO;
+ }
+
/* search the subtree(s) of the dmap control page that describes
* the allocation group, looking for sufficient free space. to begin,
* determine how many allocation groups are represented in a dmap
@@ -1698,6 +1719,13 @@
dcp = (struct dmapctl *) mp->data;
budmin = dcp->budmin;
+ if (dcp->leafidx != cpu_to_le32(CTLLEAFIND)) {
+ jfs_error(bmp->db_ipbmap->i_sb,
+ "dbFindCtl: Corrupt dmapctl page");
+ release_metapage(mp);
+ return -EIO;
+ }
+
/* search the tree within the dmap control page for
* sufficent free space. if sufficient free space is found,
* dbFindLeaf() returns the index of the leaf at which
@@ -2460,6 +2488,13 @@
return -EIO;
dcp = (struct dmapctl *) mp->data;
+ if (dcp->leafidx != cpu_to_le32(CTLLEAFIND)) {
+ jfs_error(bmp->db_ipbmap->i_sb,
+ "dbAdjCtl: Corrupt dmapctl page");
+ release_metapage(mp);
+ return -EIO;
+ }
+
/* determine the leaf number corresponding to the block and
* the index within the dmap control tree.
*/
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)