Lines Matching refs:imap

51 #define IAGFREE_LOCK_INIT(imap)		mutex_init(&imap->im_freelock)  argument
52 #define IAGFREE_LOCK(imap) mutex_lock(&imap->im_freelock) argument
53 #define IAGFREE_UNLOCK(imap) mutex_unlock(&imap->im_freelock) argument
56 #define AG_LOCK_INIT(imap,index) mutex_init(&(imap->im_aglock[index])) argument
57 #define AG_LOCK(imap,agno) mutex_lock(&imap->im_aglock[agno]) argument
58 #define AG_UNLOCK(imap,agno) mutex_unlock(&imap->im_aglock[agno]) argument
73 static int diIAGRead(struct inomap * imap, int, struct metapage **);
96 struct inomap *imap; in diMount() local
105 imap = kmalloc(sizeof(struct inomap), GFP_KERNEL); in diMount()
106 if (imap == NULL) { in diMount()
117 kfree(imap); in diMount()
123 imap->im_freeiag = le32_to_cpu(dinom_le->in_freeiag); in diMount()
124 imap->im_nextiag = le32_to_cpu(dinom_le->in_nextiag); in diMount()
125 atomic_set(&imap->im_numinos, le32_to_cpu(dinom_le->in_numinos)); in diMount()
126 atomic_set(&imap->im_numfree, le32_to_cpu(dinom_le->in_numfree)); in diMount()
127 imap->im_nbperiext = le32_to_cpu(dinom_le->in_nbperiext); in diMount()
128 imap->im_l2nbperiext = le32_to_cpu(dinom_le->in_l2nbperiext); in diMount()
130 imap->im_agctl[index].inofree = in diMount()
132 imap->im_agctl[index].extfree = in diMount()
134 imap->im_agctl[index].numinos = in diMount()
136 imap->im_agctl[index].numfree = in diMount()
147 IAGFREE_LOCK_INIT(imap); in diMount()
151 AG_LOCK_INIT(imap, index); in diMount()
157 imap->im_ipimap = ipimap; in diMount()
158 JFS_IP(ipimap)->i_imap = imap; in diMount()
180 struct inomap *imap = JFS_IP(ipimap)->i_imap; in diUnmount() local
197 kfree(imap); in diUnmount()
300 struct inomap *imap; in diRead() local
315 imap = JFS_IP(ipimap)->i_imap; in diRead()
317 rc = diIAGRead(imap, iagno, &mp); in diRead()
330 if ((lengthPXD(&iagp->inoext[extno]) != imap->im_nbperiext) || in diRead()
853 struct inomap *imap = JFS_IP(ipimap)->i_imap; in diFree() local
873 if (iagno >= imap->im_nextiag) { in diFree()
875 imap, 32, 0); in diFree()
877 (uint) inum, iagno, imap->im_nextiag); in diFree()
887 AG_LOCK(imap, agno); in diFree()
896 if ((rc = diIAGRead(imap, iagno, &mp))) { in diFree()
898 AG_UNLOCK(imap, agno); in diFree()
918 AG_UNLOCK(imap, agno); in diFree()
927 if (imap->im_agctl[agno].numfree > imap->im_agctl[agno].numinos) { in diFree()
930 AG_UNLOCK(imap, agno); in diFree()
939 imap->im_agctl[agno].numfree < 96 || in diFree()
940 (imap->im_agctl[agno].numfree < 288 && in diFree()
941 (((imap->im_agctl[agno].numfree * 100) / in diFree()
942 imap->im_agctl[agno].numinos) <= 25))) { in diFree()
953 if ((fwd = imap->im_agctl[agno].inofree) >= 0) { in diFree()
957 if ((rc = diIAGRead(imap, fwd, &amp))) { in diFree()
959 AG_UNLOCK(imap, agno); in diFree()
976 cpu_to_le32(imap->im_agctl[agno].inofree); in diFree()
978 imap->im_agctl[agno].inofree = iagno; in diFree()
1002 imap->im_agctl[agno].numfree += 1; in diFree()
1003 atomic_inc(&imap->im_numfree); in diFree()
1007 AG_UNLOCK(imap, agno); in diFree()
1037 if ((fwd = imap->im_agctl[agno].extfree) >= 0) { in diFree()
1038 if ((rc = diIAGRead(imap, fwd, &amp))) in diFree()
1055 if ((rc = diIAGRead(imap, fwd, &amp))) in diFree()
1061 if ((rc = diIAGRead(imap, back, &bmp))) in diFree()
1091 diIAGRead(imap, inofreefwd, &cmp))) in diFree()
1105 diIAGRead(imap, inofreeback, &dmp))) in diFree()
1132 cpu_to_le32(imap->im_agctl[agno].extfree); in diFree()
1134 imap->im_agctl[agno].extfree = iagno; in diFree()
1146 imap->im_agctl[agno].extfree = in diFree()
1151 IAGFREE_LOCK(imap); in diFree()
1152 iagp->iagfree = cpu_to_le32(imap->im_freeiag); in diFree()
1153 imap->im_freeiag = iagno; in diFree()
1154 IAGFREE_UNLOCK(imap); in diFree()
1168 imap->im_agctl[agno].inofree = in diFree()
1206 imap->im_agctl[agno].numfree -= (INOSPEREXT - 1); in diFree()
1207 imap->im_agctl[agno].numinos -= INOSPEREXT; in diFree()
1208 atomic_sub(INOSPEREXT - 1, &imap->im_numfree); in diFree()
1209 atomic_sub(INOSPEREXT, &imap->im_numinos); in diFree()
1266 AG_UNLOCK(imap, agno); in diFree()
1282 AG_UNLOCK(imap, agno); in diFree()
1330 struct inomap *imap; in diAlloc() local
1336 imap = JFS_IP(ipimap)->i_imap; in diAlloc()
1345 AG_LOCK(imap, agno); in diAlloc()
1368 AG_LOCK(imap, agno); in diAlloc()
1380 AG_LOCK(imap, agno); in diAlloc()
1387 if ((rc = diIAGRead(imap, iagno, &mp))) { in diAlloc()
1389 AG_UNLOCK(imap, agno); in diAlloc()
1398 addext = (imap->im_agctl[agno].numfree < 32 && iagp->nfreeexts); in diAlloc()
1425 rc = diAllocBit(imap, iagp, ino); in diAlloc()
1441 AG_UNLOCK(imap, agno); in diAlloc()
1497 AG_UNLOCK(imap, agno); in diAlloc()
1508 rc = diAllocBit(imap, iagp, ino); in diAlloc()
1524 AG_UNLOCK(imap, agno); in diAlloc()
1542 if ((rc = diNewExt(imap, iagp, extno))) { in diAlloc()
1564 AG_UNLOCK(imap, agno); in diAlloc()
1585 rc = diAllocAG(imap, agno, dir, ip); in diAlloc()
1587 AG_UNLOCK(imap, agno); in diAlloc()
1595 return (diAllocAny(imap, agno, dir, ip)); in diAlloc()
1629 diAllocAG(struct inomap * imap, int agno, bool dir, struct inode *ip) in diAllocAG() argument
1636 numfree = imap->im_agctl[agno].numfree; in diAllocAG()
1637 numinos = imap->im_agctl[agno].numinos; in diAllocAG()
1664 if ((rc = diAllocExt(imap, agno, ip)) != -ENOSPC) in diAllocAG()
1671 return (diAllocIno(imap, agno, ip)); in diAllocAG()
1699 diAllocAny(struct inomap * imap, int agno, bool dir, struct inode *ip) in diAllocAny() argument
1702 int maxag = JFS_SBI(imap->im_ipimap->i_sb)->bmap->db_maxag; in diAllocAny()
1709 AG_LOCK(imap, ag); in diAllocAny()
1711 rc = diAllocAG(imap, ag, dir, ip); in diAllocAny()
1713 AG_UNLOCK(imap, ag); in diAllocAny()
1722 AG_LOCK(imap, ag); in diAllocAny()
1724 rc = diAllocAG(imap, ag, dir, ip); in diAllocAny()
1726 AG_UNLOCK(imap, ag); in diAllocAny()
1763 static int diAllocIno(struct inomap * imap, int agno, struct inode *ip) in diAllocIno() argument
1771 if ((iagno = imap->im_agctl[agno].inofree) < 0) in diAllocIno()
1775 IREAD_LOCK(imap->im_ipimap, RDWRLOCK_IMAP); in diAllocIno()
1779 if ((rc = diIAGRead(imap, iagno, &mp))) { in diAllocIno()
1780 IREAD_UNLOCK(imap->im_ipimap); in diAllocIno()
1789 IREAD_UNLOCK(imap->im_ipimap); in diAllocIno()
1800 IREAD_UNLOCK(imap->im_ipimap); in diAllocIno()
1816 IREAD_UNLOCK(imap->im_ipimap); in diAllocIno()
1827 IREAD_UNLOCK(imap->im_ipimap); in diAllocIno()
1839 rc = diAllocBit(imap, iagp, ino); in diAllocIno()
1840 IREAD_UNLOCK(imap->im_ipimap); in diAllocIno()
1887 static int diAllocExt(struct inomap * imap, int agno, struct inode *ip) in diAllocExt() argument
1896 if ((iagno = imap->im_agctl[agno].extfree) < 0) { in diAllocExt()
1900 if ((rc = diNewIAG(imap, &iagno, agno, &mp))) { in diAllocExt()
1908 cpu_to_le64(AGTOBLK(agno, imap->im_ipimap)); in diAllocExt()
1912 IREAD_LOCK(imap->im_ipimap, RDWRLOCK_IMAP); in diAllocExt()
1913 if ((rc = diIAGRead(imap, iagno, &mp))) { in diAllocExt()
1914 IREAD_UNLOCK(imap->im_ipimap); in diAllocExt()
1926 IREAD_UNLOCK(imap->im_ipimap); in diAllocExt()
1939 IREAD_UNLOCK(imap->im_ipimap); in diAllocExt()
1947 rc = diNewExt(imap, iagp, extno); in diAllocExt()
1948 IREAD_UNLOCK(imap->im_ipimap); in diAllocExt()
1955 IAGFREE_LOCK(imap); in diAllocExt()
1956 iagp->iagfree = cpu_to_le32(imap->im_freeiag); in diAllocExt()
1957 imap->im_freeiag = iagno; in diAllocExt()
1958 IAGFREE_UNLOCK(imap); in diAllocExt()
2004 static int diAllocBit(struct inomap * imap, struct iag * iagp, int ino) in diAllocBit() argument
2019 diIAGRead(imap, le32_to_cpu(iagp->inofreefwd), in diAllocBit()
2027 diIAGRead(imap, in diAllocBit()
2041 agno = BLKTOAG(le64_to_cpu(iagp->agstart), JFS_SBI(imap->im_ipimap->i_sb)); in diAllocBit()
2059 jfs_error(imap->im_ipimap->i_sb, "iag inconsistent\n"); in diAllocBit()
2090 imap->im_agctl[agno].inofree = in diAllocBit()
2100 imap->im_agctl[agno].numfree -= 1; in diAllocBit()
2101 atomic_dec(&imap->im_numfree); in diAllocBit()
2150 static int diNewExt(struct inomap * imap, struct iag * iagp, int extno) in diNewExt() argument
2166 jfs_error(imap->im_ipimap->i_sb, "no free extents\n"); in diNewExt()
2172 ipimap = imap->im_ipimap; in diNewExt()
2189 if ((rc = diIAGRead(imap, fwd, &amp))) in diNewExt()
2195 if ((rc = diIAGRead(imap, back, &bmp))) in diNewExt()
2208 if ((fwd = imap->im_agctl[agno].extfree) >= 0) { in diNewExt()
2209 if ((rc = diIAGRead(imap, fwd, &amp))) in diNewExt()
2224 freei = imap->im_agctl[agno].inofree; in diNewExt()
2232 if ((rc = diIAGRead(imap, freei, &cmp))) in diNewExt()
2237 jfs_error(imap->im_ipimap->i_sb, in diNewExt()
2253 if ((rc = dbAlloc(ipimap, hint, (s64) imap->im_nbperiext, &blkno))) in diNewExt()
2264 for (i = 0; i < imap->im_nbperiext; i += sbi->nbperpage) { in diNewExt()
2284 PXDlength(&(dp->di_ixpxd), imap->im_nbperiext); in diNewExt()
2299 imap->im_agctl[agno].extfree = in diNewExt()
2313 imap->im_agctl[agno].extfree = iagno; in diNewExt()
2325 cpu_to_le32(imap->im_agctl[agno].inofree); in diNewExt()
2327 imap->im_agctl[agno].inofree = iagno; in diNewExt()
2331 PXDlength(&iagp->inoext[extno], imap->im_nbperiext); in diNewExt()
2358 imap->im_agctl[agno].numfree += (INOSPEREXT - 1); in diNewExt()
2359 imap->im_agctl[agno].numinos += INOSPEREXT; in diNewExt()
2363 atomic_add(INOSPEREXT - 1, &imap->im_numfree); in diNewExt()
2364 atomic_add(INOSPEREXT, &imap->im_numinos); in diNewExt()
2432 diNewIAG(struct inomap * imap, int *iagnop, int agno, struct metapage ** mpp) in diNewIAG() argument
2447 ipimap = imap->im_ipimap; in diNewIAG()
2452 IAGFREE_LOCK(imap); in diNewIAG()
2457 if (imap->im_freeiag >= 0) { in diNewIAG()
2459 iagno = imap->im_freeiag; in diNewIAG()
2471 if (ipimap->i_size >> L2PSIZE != imap->im_nextiag + 1) { in diNewIAG()
2473 IAGFREE_UNLOCK(imap); in diNewIAG()
2474 jfs_error(imap->im_ipimap->i_sb, in diNewIAG()
2481 iagno = imap->im_nextiag; in diNewIAG()
2592 imap->im_nextiag += 1; in diNewIAG()
2597 imap->im_freeiag = iagno; in diNewIAG()
2612 if ((rc = diIAGRead(imap, iagno, &mp))) { in diNewIAG()
2620 imap->im_freeiag = le32_to_cpu(iagp->iagfree); in diNewIAG()
2629 IAGFREE_UNLOCK(imap); in diNewIAG()
2655 static int diIAGRead(struct inomap * imap, int iagno, struct metapage ** mpp) in diIAGRead() argument
2657 struct inode *ipimap = imap->im_ipimap; in diIAGRead()
2724 struct inomap *imap; in diUpdatePMap() local
2730 imap = JFS_IP(ipimap)->i_imap; in diUpdatePMap()
2734 if (iagno >= imap->im_nextiag) { in diUpdatePMap()
2740 rc = diIAGRead(imap, iagno, &mp); in diUpdatePMap()
2842 struct inomap *imap = JFS_IP(ipimap)->i_imap; in diExtendFS() local
2851 imap->im_nextiag, atomic_read(&imap->im_numinos), in diExtendFS()
2852 atomic_read(&imap->im_numfree)); in diExtendFS()
2864 imap->im_agctl[i].inofree = -1; in diExtendFS()
2865 imap->im_agctl[i].extfree = -1; in diExtendFS()
2866 imap->im_agctl[i].numinos = 0; /* number of backed inodes */ in diExtendFS()
2867 imap->im_agctl[i].numfree = 0; /* number of free backed inodes */ in diExtendFS()
2875 for (i = 0; i < imap->im_nextiag; i++) { in diExtendFS()
2876 if ((rc = diIAGRead(imap, i, &bp))) { in diExtendFS()
2902 imap->im_agctl[n].numinos += numinos; in diExtendFS()
2908 if ((head = imap->im_agctl[n].inofree) == -1) { in diExtendFS()
2912 if ((rc = diIAGRead(imap, head, &hbp))) { in diExtendFS()
2923 imap->im_agctl[n].inofree = in diExtendFS()
2927 imap->im_agctl[n].numfree += in diExtendFS()
2934 if ((head = imap->im_agctl[n].extfree) == -1) { in diExtendFS()
2938 if ((rc = diIAGRead(imap, head, &hbp))) { in diExtendFS()
2949 imap->im_agctl[n].extfree = in diExtendFS()
2957 if (xnuminos != atomic_read(&imap->im_numinos) || in diExtendFS()
2958 xnumfree != atomic_read(&imap->im_numfree)) { in diExtendFS()