• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/fs/jfs/

Lines Matching defs:imap

66  * imap locks
69 #define IAGFREE_LOCK_INIT(imap) mutex_init(&imap->im_freelock)
70 #define IAGFREE_LOCK(imap) mutex_lock(&imap->im_freelock)
71 #define IAGFREE_UNLOCK(imap) mutex_unlock(&imap->im_freelock)
74 #define AG_LOCK_INIT(imap,index) mutex_init(&(imap->im_aglock[index]))
75 #define AG_LOCK(imap,agno) mutex_lock(&imap->im_aglock[agno])
76 #define AG_UNLOCK(imap,agno) mutex_unlock(&imap->im_aglock[agno])
91 static int diIAGRead(struct inomap * imap, int, struct metapage **);
114 struct inomap *imap;
123 imap = kmalloc(sizeof(struct inomap), GFP_KERNEL);
124 if (imap == NULL) {
135 kfree(imap);
141 imap->im_freeiag = le32_to_cpu(dinom_le->in_freeiag);
142 imap->im_nextiag = le32_to_cpu(dinom_le->in_nextiag);
143 atomic_set(&imap->im_numinos, le32_to_cpu(dinom_le->in_numinos));
144 atomic_set(&imap->im_numfree, le32_to_cpu(dinom_le->in_numfree));
145 imap->im_nbperiext = le32_to_cpu(dinom_le->in_nbperiext);
146 imap->im_l2nbperiext = le32_to_cpu(dinom_le->in_l2nbperiext);
148 imap->im_agctl[index].inofree =
150 imap->im_agctl[index].extfree =
152 imap->im_agctl[index].numinos =
154 imap->im_agctl[index].numfree =
165 IAGFREE_LOCK_INIT(imap);
169 AG_LOCK_INIT(imap, index);
175 imap->im_ipimap = ipimap;
176 JFS_IP(ipimap)->i_imap = imap;
198 struct inomap *imap = JFS_IP(ipimap)->i_imap;
215 kfree(imap);
232 * write imap global conrol page
266 * write out dirty pages of imap
318 struct inomap *imap;
333 imap = JFS_IP(ipimap)->i_imap;
335 rc = diIAGRead(imap, iagno, &mp);
348 if ((lengthPXD(&iagp->inoext[extno]) != imap->im_nbperiext) ||
884 struct inomap *imap = JFS_IP(ipimap)->i_imap;
904 if (iagno >= imap->im_nextiag) {
905 dump_mem("imap", imap, 32);
908 (uint) inum, iagno, imap->im_nextiag);
918 AG_LOCK(imap, agno);
920 /* Obtain read lock in imap inode. Don't release it until we have
927 if ((rc = diIAGRead(imap, iagno, &mp))) {
929 AG_UNLOCK(imap, agno);
950 AG_UNLOCK(imap, agno);
959 if (imap->im_agctl[agno].numfree > imap->im_agctl[agno].numinos) {
962 AG_UNLOCK(imap, agno);
971 imap->im_agctl[agno].numfree < 96 ||
972 (imap->im_agctl[agno].numfree < 288 &&
973 (((imap->im_agctl[agno].numfree * 100) /
974 imap->im_agctl[agno].numinos) <= 25))) {
985 if ((fwd = imap->im_agctl[agno].inofree) >= 0) {
989 if ((rc = diIAGRead(imap, fwd, &amp))) {
991 AG_UNLOCK(imap, agno);
1008 cpu_to_le32(imap->im_agctl[agno].inofree);
1010 imap->im_agctl[agno].inofree = iagno;
1035 imap->im_agctl[agno].numfree += 1;
1036 atomic_inc(&imap->im_numfree);
1040 AG_UNLOCK(imap, agno);
1070 if ((fwd = imap->im_agctl[agno].extfree) >= 0) {
1071 if ((rc = diIAGRead(imap, fwd, &amp)))
1088 if ((rc = diIAGRead(imap, fwd, &amp)))
1094 if ((rc = diIAGRead(imap, back, &bmp)))
1124 diIAGRead(imap, inofreefwd, &cmp)))
1138 diIAGRead(imap, inofreeback, &dmp)))
1165 cpu_to_le32(imap->im_agctl[agno].extfree);
1167 imap->im_agctl[agno].extfree = iagno;
1179 imap->im_agctl[agno].extfree =
1184 IAGFREE_LOCK(imap);
1185 iagp->iagfree = cpu_to_le32(imap->im_freeiag);
1186 imap->im_freeiag = iagno;
1187 IAGFREE_UNLOCK(imap);
1201 imap->im_agctl[agno].inofree =
1240 imap->im_agctl[agno].numfree -= (INOSPEREXT - 1);
1241 imap->im_agctl[agno].numinos -= INOSPEREXT;
1242 atomic_sub(INOSPEREXT - 1, &imap->im_numfree);
1243 atomic_sub(INOSPEREXT, &imap->im_numinos);
1300 AG_UNLOCK(imap, agno);
1316 AG_UNLOCK(imap, agno);
1365 struct inomap *imap;
1368 * corresponding imap control structure.
1371 imap = JFS_IP(ipimap)->i_imap;
1380 AG_LOCK(imap, agno);
1403 AG_LOCK(imap, agno);
1415 AG_LOCK(imap, agno);
1417 /* Get read lock on imap inode */
1422 if ((rc = diIAGRead(imap, iagno, &mp))) {
1424 AG_UNLOCK(imap, agno);
1433 addext = (imap->im_agctl[agno].numfree < 32 && iagp->nfreeexts);
1460 rc = diAllocBit(imap, iagp, ino);
1476 AG_UNLOCK(imap, agno);
1532 AG_UNLOCK(imap, agno);
1544 rc = diAllocBit(imap, iagp, ino);
1560 AG_UNLOCK(imap, agno);
1578 if ((rc = diNewExt(imap, iagp, extno))) {
1597 /* free the imap inode & the AG lock & return.
1600 AG_UNLOCK(imap, agno);
1611 /* unlock imap inode */
1621 rc = diAllocAG(imap, agno, dir, ip);
1623 AG_UNLOCK(imap, agno);
1631 return (diAllocAny(imap, agno, dir, ip));
1636 * NAME: diAllocAG(imap,agno,dir,ip)
1652 * imap - pointer to inode map control structure.
1665 diAllocAG(struct inomap * imap, int agno, bool dir, struct inode *ip)
1672 numfree = imap->im_agctl[agno].numfree;
1673 numinos = imap->im_agctl[agno].numinos;
1700 if ((rc = diAllocExt(imap, agno, ip)) != -ENOSPC)
1707 return (diAllocIno(imap, agno, ip));
1712 * NAME: diAllocAny(imap,agno,dir,iap)
1722 * imap - pointer to inode map control structure.
1735 diAllocAny(struct inomap * imap, int agno, bool dir, struct inode *ip)
1738 int maxag = JFS_SBI(imap->im_ipimap->i_sb)->bmap->db_maxag;
1745 AG_LOCK(imap, ag);
1747 rc = diAllocAG(imap, ag, dir, ip);
1749 AG_UNLOCK(imap, ag);
1758 AG_LOCK(imap, ag);
1760 rc = diAllocAG(imap, ag, dir, ip);
1762 AG_UNLOCK(imap, ag);
1775 * NAME: diAllocIno(imap,agno,ip)
1788 * imap - pointer to inode map control structure.
1799 static int diAllocIno(struct inomap * imap, int agno, struct inode *ip)
1807 if ((iagno = imap->im_agctl[agno].inofree) < 0)
1810 /* obtain read lock on imap inode */
1811 IREAD_LOCK(imap->im_ipimap, RDWRLOCK_IMAP);
1815 if ((rc = diIAGRead(imap, iagno, &mp))) {
1816 IREAD_UNLOCK(imap->im_ipimap);
1825 IREAD_UNLOCK(imap->im_ipimap);
1837 IREAD_UNLOCK(imap->im_ipimap);
1853 IREAD_UNLOCK(imap->im_ipimap);
1864 IREAD_UNLOCK(imap->im_ipimap);
1876 rc = diAllocBit(imap, iagp, ino);
1877 IREAD_UNLOCK(imap->im_ipimap);
1893 * NAME: diAllocExt(imap,agno,ip)
1913 * imap - pointer to inode map control structure.
1924 static int diAllocExt(struct inomap * imap, int agno, struct inode *ip)
1933 if ((iagno = imap->im_agctl[agno].extfree) < 0) {
1935 * imap inode.
1937 if ((rc = diNewIAG(imap, &iagno, agno, &mp))) {
1945 cpu_to_le64(AGTOBLK(agno, imap->im_ipimap));
1949 IREAD_LOCK(imap->im_ipimap, RDWRLOCK_IMAP);
1950 if ((rc = diIAGRead(imap, iagno, &mp))) {
1951 IREAD_UNLOCK(imap->im_ipimap);
1963 IREAD_UNLOCK(imap->im_ipimap);
1977 IREAD_UNLOCK(imap->im_ipimap);
1985 rc = diNewExt(imap, iagp, extno);
1986 IREAD_UNLOCK(imap->im_ipimap);
1993 IAGFREE_LOCK(imap);
1994 iagp->iagfree = cpu_to_le32(imap->im_freeiag);
1995 imap->im_freeiag = iagno;
1996 IAGFREE_UNLOCK(imap);
2013 * NAME: diAllocBit(imap,iagp,ino)
2030 * this AG. Must have read lock on imap inode.
2033 * imap - pointer to inode map control structure.
2042 static int diAllocBit(struct inomap * imap, struct iag * iagp, int ino)
2057 diIAGRead(imap, le32_to_cpu(iagp->inofreefwd),
2065 diIAGRead(imap,
2079 agno = BLKTOAG(le64_to_cpu(iagp->agstart), JFS_SBI(imap->im_ipimap->i_sb));
2097 jfs_error(imap->im_ipimap->i_sb,
2129 imap->im_agctl[agno].inofree =
2139 imap->im_agctl[agno].numfree -= 1;
2140 atomic_dec(&imap->im_numfree);
2147 * NAME: diNewExt(imap,iagp,extno)
2177 * this AG. Must have read lock on imap inode.
2180 * imap - pointer to inode map control structure.
2189 static int diNewExt(struct inomap * imap, struct iag * iagp, int extno)
2205 jfs_error(imap->im_ipimap->i_sb, "diNewExt: no free extents");
2211 ipimap = imap->im_ipimap;
2228 if ((rc = diIAGRead(imap, fwd, &amp)))
2234 if ((rc = diIAGRead(imap, back, &bmp)))
2247 if ((fwd = imap->im_agctl[agno].extfree) >= 0) {
2248 if ((rc = diIAGRead(imap, fwd, &amp)))
2263 freei = imap->im_agctl[agno].inofree;
2271 if ((rc = diIAGRead(imap, freei, &cmp)))
2276 jfs_error(imap->im_ipimap->i_sb,
2292 if ((rc = dbAlloc(ipimap, hint, (s64) imap->im_nbperiext, &blkno)))
2303 for (i = 0; i < imap->im_nbperiext; i += sbi->nbperpage) {
2323 PXDlength(&(dp->di_ixpxd), imap->im_nbperiext);
2338 imap->im_agctl[agno].extfree =
2352 imap->im_agctl[agno].extfree = iagno;
2364 cpu_to_le32(imap->im_agctl[agno].inofree);
2366 imap->im_agctl[agno].inofree = iagno;
2370 PXDlength(&iagp->inoext[extno], imap->im_nbperiext);
2398 imap->im_agctl[agno].numfree += (INOSPEREXT - 1);
2399 imap->im_agctl[agno].numinos += INOSPEREXT;
2403 atomic_add(INOSPEREXT - 1, &imap->im_numfree);
2404 atomic_add(INOSPEREXT, &imap->im_numinos);
2433 * NAME: diNewIAG(imap,iagnop,agno)
2446 * imap - pointer to inode map control structure.
2464 * . write log of xtree and inode of imap;
2467 * . at start of logredo(): init in-memory imap with one additional iag page;
2468 * . at end of logredo(): re-read imap inode to determine
2469 * new imap size;
2472 diNewIAG(struct inomap * imap, int *iagnop, int agno, struct metapage ** mpp)
2490 ipimap = imap->im_ipimap;
2495 IAGFREE_LOCK(imap);
2500 if (imap->im_freeiag >= 0) {
2502 iagno = imap->im_freeiag;
2514 if (ipimap->i_size >> L2PSIZE != imap->im_nextiag + 1) {
2516 IAGFREE_UNLOCK(imap);
2517 jfs_error(imap->im_ipimap->i_sb,
2524 iagno = imap->im_nextiag;
2634 imap->im_nextiag += 1;
2639 imap->im_freeiag = iagno;
2641 /* Until we have logredo working, we want the imap inode &
2654 if ((rc = diIAGRead(imap, iagno, &mp))) {
2662 imap->im_freeiag = le32_to_cpu(iagp->iagfree);
2671 IAGFREE_UNLOCK(imap);
2683 * imap - pointer to inode map control structure.
2689 * must have read lock on imap inode
2697 static int diIAGRead(struct inomap * imap, int iagno, struct metapage ** mpp)
2699 struct inode *ipimap = imap->im_ipimap;
2766 struct inomap *imap;
2772 imap = JFS_IP(ipimap)->i_imap;
2776 if (iagno >= imap->im_nextiag) {
2783 rc = diIAGRead(imap, iagno, &mp);
2879 * function: update imap for extendfs();
2887 struct inomap *imap = JFS_IP(ipimap)->i_imap;
2896 imap->im_nextiag, atomic_read(&imap->im_numinos),
2897 atomic_read(&imap->im_numfree));
2900 * reconstruct imap
2909 imap->im_agctl[i].inofree = -1;
2910 imap->im_agctl[i].extfree = -1;
2911 imap->im_agctl[i].numinos = 0; /* number of backed inodes */
2912 imap->im_agctl[i].numfree = 0; /* number of free backed inodes */
2920 for (i = 0; i < imap->im_nextiag; i++) {
2921 if ((rc = diIAGRead(imap, i, &bp))) {
2949 imap->im_agctl[n].numinos += numinos;
2955 if ((head = imap->im_agctl[n].inofree) == -1) {
2959 if ((rc = diIAGRead(imap, head, &hbp))) {
2970 imap->im_agctl[n].inofree =
2974 imap->im_agctl[n].numfree +=
2981 if ((head = imap->im_agctl[n].extfree) == -1) {
2985 if ((rc = diIAGRead(imap, head, &hbp))) {
2996 imap->im_agctl[n].extfree =
3004 if (xnuminos != atomic_read(&imap->im_numinos) ||
3005 xnumfree != atomic_read(&imap->im_numfree)) {