diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /fs/jfs/jfs_imap.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'fs/jfs/jfs_imap.c')
-rw-r--r-- | fs/jfs/jfs_imap.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c index f8332dc8eeb2..b78b2f978f04 100644 --- a/fs/jfs/jfs_imap.c +++ b/fs/jfs/jfs_imap.c | |||
@@ -397,7 +397,7 @@ int diRead(struct inode *ip) | |||
397 | release_metapage(mp); | 397 | release_metapage(mp); |
398 | 398 | ||
399 | /* set the ag for the inode */ | 399 | /* set the ag for the inode */ |
400 | JFS_IP(ip)->agno = BLKTOAG(agstart, sbi); | 400 | JFS_IP(ip)->agstart = agstart; |
401 | JFS_IP(ip)->active_ag = -1; | 401 | JFS_IP(ip)->active_ag = -1; |
402 | 402 | ||
403 | return (rc); | 403 | return (rc); |
@@ -497,7 +497,7 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) | |||
497 | * appear hashed, but do not put on any lists. hlist_del() | 497 | * appear hashed, but do not put on any lists. hlist_del() |
498 | * will work fine and require no locking. | 498 | * will work fine and require no locking. |
499 | */ | 499 | */ |
500 | ip->i_hash.pprev = &ip->i_hash.next; | 500 | hlist_add_fake(&ip->i_hash); |
501 | 501 | ||
502 | return (ip); | 502 | return (ip); |
503 | } | 503 | } |
@@ -901,7 +901,7 @@ int diFree(struct inode *ip) | |||
901 | 901 | ||
902 | /* get the allocation group for this ino. | 902 | /* get the allocation group for this ino. |
903 | */ | 903 | */ |
904 | agno = JFS_IP(ip)->agno; | 904 | agno = BLKTOAG(JFS_IP(ip)->agstart, JFS_SBI(ip->i_sb)); |
905 | 905 | ||
906 | /* Lock the AG specific inode map information | 906 | /* Lock the AG specific inode map information |
907 | */ | 907 | */ |
@@ -1069,7 +1069,7 @@ int diFree(struct inode *ip) | |||
1069 | */ | 1069 | */ |
1070 | if (iagp->nfreeexts == cpu_to_le32(EXTSPERIAG - 1)) { | 1070 | if (iagp->nfreeexts == cpu_to_le32(EXTSPERIAG - 1)) { |
1071 | /* in preparation for removing the iag from the | 1071 | /* in preparation for removing the iag from the |
1072 | * ag extent free list, read the iags preceeding | 1072 | * ag extent free list, read the iags preceding |
1073 | * and following the iag on the ag extent free | 1073 | * and following the iag on the ag extent free |
1074 | * list. | 1074 | * list. |
1075 | */ | 1075 | */ |
@@ -1095,7 +1095,7 @@ int diFree(struct inode *ip) | |||
1095 | int inofreefwd = le32_to_cpu(iagp->inofreefwd); | 1095 | int inofreefwd = le32_to_cpu(iagp->inofreefwd); |
1096 | 1096 | ||
1097 | /* in preparation for removing the iag from the | 1097 | /* in preparation for removing the iag from the |
1098 | * ag inode free list, read the iags preceeding | 1098 | * ag inode free list, read the iags preceding |
1099 | * and following the iag on the ag inode free | 1099 | * and following the iag on the ag inode free |
1100 | * list. before reading these iags, we must make | 1100 | * list. before reading these iags, we must make |
1101 | * sure that we already don't have them in hand | 1101 | * sure that we already don't have them in hand |
@@ -1315,12 +1315,11 @@ int diFree(struct inode *ip) | |||
1315 | static inline void | 1315 | static inline void |
1316 | diInitInode(struct inode *ip, int iagno, int ino, int extno, struct iag * iagp) | 1316 | diInitInode(struct inode *ip, int iagno, int ino, int extno, struct iag * iagp) |
1317 | { | 1317 | { |
1318 | struct jfs_sb_info *sbi = JFS_SBI(ip->i_sb); | ||
1319 | struct jfs_inode_info *jfs_ip = JFS_IP(ip); | 1318 | struct jfs_inode_info *jfs_ip = JFS_IP(ip); |
1320 | 1319 | ||
1321 | ip->i_ino = (iagno << L2INOSPERIAG) + ino; | 1320 | ip->i_ino = (iagno << L2INOSPERIAG) + ino; |
1322 | jfs_ip->ixpxd = iagp->inoext[extno]; | 1321 | jfs_ip->ixpxd = iagp->inoext[extno]; |
1323 | jfs_ip->agno = BLKTOAG(le64_to_cpu(iagp->agstart), sbi); | 1322 | jfs_ip->agstart = le64_to_cpu(iagp->agstart); |
1324 | jfs_ip->active_ag = -1; | 1323 | jfs_ip->active_ag = -1; |
1325 | } | 1324 | } |
1326 | 1325 | ||
@@ -1379,7 +1378,7 @@ int diAlloc(struct inode *pip, bool dir, struct inode *ip) | |||
1379 | */ | 1378 | */ |
1380 | 1379 | ||
1381 | /* get the ag number of this iag */ | 1380 | /* get the ag number of this iag */ |
1382 | agno = JFS_IP(pip)->agno; | 1381 | agno = BLKTOAG(JFS_IP(pip)->agstart, JFS_SBI(pip->i_sb)); |
1383 | 1382 | ||
1384 | if (atomic_read(&JFS_SBI(pip->i_sb)->bmap->db_active[agno])) { | 1383 | if (atomic_read(&JFS_SBI(pip->i_sb)->bmap->db_active[agno])) { |
1385 | /* | 1384 | /* |
@@ -1681,7 +1680,7 @@ diAllocAG(struct inomap * imap, int agno, bool dir, struct inode *ip) | |||
1681 | * try to allocate a new extent of free inodes. | 1680 | * try to allocate a new extent of free inodes. |
1682 | */ | 1681 | */ |
1683 | if (addext) { | 1682 | if (addext) { |
1684 | /* if free space is not avaliable for this new extent, try | 1683 | /* if free space is not available for this new extent, try |
1685 | * below to allocate a free and existing (already backed) | 1684 | * below to allocate a free and existing (already backed) |
1686 | * inode from the ag. | 1685 | * inode from the ag. |
1687 | */ | 1686 | */ |
@@ -2036,7 +2035,7 @@ static int diAllocBit(struct inomap * imap, struct iag * iagp, int ino) | |||
2036 | 2035 | ||
2037 | /* check if this is the last free inode within the iag. | 2036 | /* check if this is the last free inode within the iag. |
2038 | * if so, it will have to be removed from the ag free | 2037 | * if so, it will have to be removed from the ag free |
2039 | * inode list, so get the iags preceeding and following | 2038 | * inode list, so get the iags preceding and following |
2040 | * it on the list. | 2039 | * it on the list. |
2041 | */ | 2040 | */ |
2042 | if (iagp->nfreeinos == cpu_to_le32(1)) { | 2041 | if (iagp->nfreeinos == cpu_to_le32(1)) { |
@@ -2208,7 +2207,7 @@ static int diNewExt(struct inomap * imap, struct iag * iagp, int extno) | |||
2208 | 2207 | ||
2209 | /* check if this is the last free extent within the | 2208 | /* check if this is the last free extent within the |
2210 | * iag. if so, the iag must be removed from the ag | 2209 | * iag. if so, the iag must be removed from the ag |
2211 | * free extent list, so get the iags preceeding and | 2210 | * free extent list, so get the iags preceding and |
2212 | * following the iag on this list. | 2211 | * following the iag on this list. |
2213 | */ | 2212 | */ |
2214 | if (iagp->nfreeexts == cpu_to_le32(1)) { | 2213 | if (iagp->nfreeexts == cpu_to_le32(1)) { |
@@ -2504,7 +2503,7 @@ diNewIAG(struct inomap * imap, int *iagnop, int agno, struct metapage ** mpp) | |||
2504 | } | 2503 | } |
2505 | 2504 | ||
2506 | 2505 | ||
2507 | /* get the next avaliable iag number */ | 2506 | /* get the next available iag number */ |
2508 | iagno = imap->im_nextiag; | 2507 | iagno = imap->im_nextiag; |
2509 | 2508 | ||
2510 | /* make sure that we have not exceeded the maximum inode | 2509 | /* make sure that we have not exceeded the maximum inode |
@@ -2615,7 +2614,7 @@ diNewIAG(struct inomap * imap, int *iagnop, int agno, struct metapage ** mpp) | |||
2615 | 2614 | ||
2616 | duplicateIXtree(sb, blkno, xlen, &xaddr); | 2615 | duplicateIXtree(sb, blkno, xlen, &xaddr); |
2617 | 2616 | ||
2618 | /* update the next avaliable iag number */ | 2617 | /* update the next available iag number */ |
2619 | imap->im_nextiag += 1; | 2618 | imap->im_nextiag += 1; |
2620 | 2619 | ||
2621 | /* Add the iag to the iag free list so we don't lose the iag | 2620 | /* Add the iag to the iag free list so we don't lose the iag |
@@ -2921,10 +2920,9 @@ int diExtendFS(struct inode *ipimap, struct inode *ipbmap) | |||
2921 | continue; | 2920 | continue; |
2922 | } | 2921 | } |
2923 | 2922 | ||
2924 | /* agstart that computes to the same ag is treated as same; */ | ||
2925 | agstart = le64_to_cpu(iagp->agstart); | 2923 | agstart = le64_to_cpu(iagp->agstart); |
2926 | /* iagp->agstart = agstart & ~(mp->db_agsize - 1); */ | ||
2927 | n = agstart >> mp->db_agl2size; | 2924 | n = agstart >> mp->db_agl2size; |
2925 | iagp->agstart = cpu_to_le64((s64)n << mp->db_agl2size); | ||
2928 | 2926 | ||
2929 | /* compute backed inodes */ | 2927 | /* compute backed inodes */ |
2930 | numinos = (EXTSPERIAG - le32_to_cpu(iagp->nfreeexts)) | 2928 | numinos = (EXTSPERIAG - le32_to_cpu(iagp->nfreeexts)) |