Lines Matching refs:ip

139 static int dtSplitUp(tid_t tid, struct inode *ip,
142 static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split,
145 static int dtExtendPage(tid_t tid, struct inode *ip,
148 static int dtSplitRoot(tid_t tid, struct inode *ip,
151 static int dtDeleteUp(tid_t tid, struct inode *ip, struct metapage * fmp,
154 static int dtRelink(tid_t tid, struct inode *ip, dtpage_t * p);
156 static int dtReadFirst(struct inode *ip, struct btstack * btstack);
158 static int dtReadNext(struct inode *ip,
236 static struct dir_table_slot *find_index(struct inode *ip, u32 index, in find_index() argument
239 struct jfs_inode_info *jfs_ip = JFS_IP(ip); in find_index()
259 if (jfs_dirtable_inline(ip)) { in find_index()
269 JFS_SBI(ip->i_sb)->l2nbperpage; in find_index()
277 *mp = read_index_page(ip, blkno); in find_index()
291 static inline void lock_index(tid_t tid, struct inode *ip, struct metapage * mp, in lock_index() argument
298 tlck = txLock(tid, ip, mp, tlckDATA); in lock_index()
321 static u32 add_index(tid_t tid, struct inode *ip, s64 bn, int slot) in add_index() argument
323 struct super_block *sb = ip->i_sb; in add_index()
325 struct jfs_inode_info *jfs_ip = JFS_IP(ip); in add_index()
337 ASSERT(DO_INDEX(ip)); in add_index()
351 ip->i_size = (loff_t) (index - 1) << 3; in add_index()
361 set_cflag(COMMIT_Dirtable, ip); in add_index()
372 if (dquot_alloc_block(ip, sbi->nbperpage)) in add_index()
374 if (dbAlloc(ip, 0, sbi->nbperpage, &xaddr)) { in add_index()
375 dquot_free_block(ip, sbi->nbperpage); in add_index()
388 xtInitRoot(tid, ip); in add_index()
393 if (xtInsert(tid, ip, 0, 0, sbi->nbperpage, &xaddr, 0)) { in add_index()
398 dbFree(ip, xaddr, sbi->nbperpage); in add_index()
399 dquot_free_block(ip, sbi->nbperpage); in add_index()
402 ip->i_size = PSIZE; in add_index()
404 mp = get_index_page(ip, 0); in add_index()
407 xtTruncate(tid, ip, 0, COMMIT_PWMAP); in add_index()
412 tlck = txLock(tid, ip, mp, tlckDATA); in add_index()
429 clear_cflag(COMMIT_Dirtable, ip); in add_index()
440 if (xtInsert(tid, ip, 0, blkno, sbi->nbperpage, &xaddr, 0)) { in add_index()
444 ip->i_size += PSIZE; in add_index()
446 if ((mp = get_index_page(ip, blkno))) in add_index()
449 xtTruncate(tid, ip, offset, COMMIT_PWMAP); in add_index()
451 mp = read_index_page(ip, blkno); in add_index()
458 lock_index(tid, ip, mp, index); in add_index()
483 static void free_index(tid_t tid, struct inode *ip, u32 index, u32 next) in free_index() argument
489 dirtab_slot = find_index(ip, index, &mp, &lblock); in free_index()
499 lock_index(tid, ip, mp, index); in free_index()
503 set_cflag(COMMIT_Dirtable, ip); in free_index()
511 static void modify_index(tid_t tid, struct inode *ip, u32 index, s64 bn, in modify_index() argument
516 dirtab_slot = find_index(ip, index, mp, lblock); in modify_index()
525 lock_index(tid, ip, *mp, index); in modify_index()
528 set_cflag(COMMIT_Dirtable, ip); in modify_index()
536 static int read_index(struct inode *ip, u32 index, in read_index() argument
543 slot = find_index(ip, index, &mp, &lblock); in read_index()
567 int dtSearch(struct inode *ip, struct component_name * key, ino_t * data, in dtSearch() argument
582 struct super_block *sb = ip->i_sb; in dtSearch()
623 DT_GETPAGE(ip, bn, mp, psize, p, rc); in dtSearch()
785 psize = lengthPXD(pxd) << JFS_SBI(ip->i_sb)->l2bsize; in dtSearch()
814 int dtInsert(tid_t tid, struct inode *ip, in dtInsert() argument
836 DT_GETSEARCH(ip, btstack->top, bn, mp, p, index); in dtInsert()
843 if (DO_INDEX(ip)) { in dtInsert()
844 if (JFS_IP(ip)->next_index == DIREND) { in dtInsert()
850 data.leaf.ip = ip; in dtInsert()
853 data.leaf.ip = NULL; /* signifies legacy directory format */ in dtInsert()
870 rc = dtSplitUp(tid, ip, &split, btstack); in dtInsert()
879 BT_MARK_DIRTY(mp, ip); in dtInsert()
883 tlck = txLock(tid, ip, mp, tlckDTREE | tlckENTRY); in dtInsert()
926 struct inode *ip, struct dtsplit * split, struct btstack * btstack) in dtSplitUp() argument
928 struct jfs_sb_info *sbi = JFS_SBI(ip->i_sb); in dtSplitUp()
953 sp = DT_PAGE(ip, smp); in dtSplitUp()
981 if ((rc = dbAlloc(ip, 0, (s64) xlen, &xaddr))) { in dtSplitUp()
992 rc = dtSplitRoot(tid, ip, split, &rmp); in dtSplitUp()
995 dbFree(ip, xaddr, xlen); in dtSplitUp()
1001 if (!DO_INDEX(ip)) in dtSplitUp()
1002 ip->i_size = xlen << sbi->l2bsize; in dtSplitUp()
1026 rc = dquot_alloc_block(ip, n); in dtSplitUp()
1041 if ((rc = dtExtendPage(tid, ip, split, btstack))) { in dtSplitUp()
1046 dbFree(ip, nxaddr, (s64) xlen); in dtSplitUp()
1051 dbFree(ip, xaddr, (s64) n); in dtSplitUp()
1053 } else if (!DO_INDEX(ip)) in dtSplitUp()
1054 ip->i_size = lengthPXD(pxd) << sbi->l2bsize; in dtSplitUp()
1077 if ((rc = dbAlloc(ip, 0, (s64) xlen, &xaddr)) == 0) { in dtSplitUp()
1091 if ((rc = dtSplitPage(tid, ip, split, &rmp, &rp, &rpxd))) { in dtSplitUp()
1098 if (!DO_INDEX(ip)) in dtSplitUp()
1099 ip->i_size += PSIZE; in dtSplitUp()
1133 DT_GETPAGE(ip, parent->bn, smp, PSIZE, sp, rc); in dtSplitUp()
1243 dtSplitRoot(tid, ip, split, &rmp) : in dtSplitUp()
1244 dtSplitPage(tid, ip, split, &rmp, &rp, &rpxd); in dtSplitUp()
1256 BT_MARK_DIRTY(smp, ip); in dtSplitUp()
1260 tlck = txLock(tid, ip, smp, tlckDTREE | tlckENTRY); in dtSplitUp()
1299 dbFree(ip, addressPXD(pxd), (s64) lengthPXD(pxd)); in dtSplitUp()
1306 dquot_free_block(ip, quota_allocation); in dtSplitUp()
1325 static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split, in dtSplitPage() argument
1353 sp = DT_PAGE(ip, smp); in dtSplitPage()
1362 rmp = get_metapage(ip, rbn, PSIZE, 1); in dtSplitPage()
1367 rc = dquot_alloc_block(ip, lengthPXD(pxd)); in dtSplitPage()
1373 jfs_info("dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p", ip, smp, rmp); in dtSplitPage()
1375 BT_MARK_DIRTY(rmp, ip); in dtSplitPage()
1379 tlck = txLock(tid, ip, rmp, tlckDTREE | tlckNEW); in dtSplitPage()
1386 BT_MARK_DIRTY(smp, ip); in dtSplitPage()
1392 tlck = txLock(tid, ip, smp, tlckDTREE | tlckENTRY); in dtSplitPage()
1470 DT_GETPAGE(ip, nextbn, mp, PSIZE, p, rc); in dtSplitPage()
1476 BT_MARK_DIRTY(mp, ip); in dtSplitPage()
1480 tlck = txLock(tid, ip, mp, tlckDTREE | tlckRELINK); in dtSplitPage()
1482 tlck, ip, mp); in dtSplitPage()
1520 if (DO_INDEX(ip)) in dtSplitPage()
1560 dtMoveEntry(sp, nxt, rp, &sdtlck, &rdtlck, DO_INDEX(ip)); in dtSplitPage()
1576 if ((rp->header.flag & BT_LEAF) && DO_INDEX(ip)) { in dtSplitPage()
1583 modify_index(tid, ip, le32_to_cpu(ldtentry->index), in dtSplitPage()
1638 struct inode *ip, struct dtsplit * split, struct btstack * btstack) in dtExtendPage() argument
1640 struct super_block *sb = ip->i_sb; in dtExtendPage()
1664 sp = DT_PAGE(ip, smp); in dtExtendPage()
1668 DT_GETPAGE(ip, parent->bn, pmp, PSIZE, pp, rc); in dtExtendPage()
1691 tlck = txMaplock(tid, ip, tlckDTREE | tlckRELOCATE); in dtExtendPage()
1700 if (DO_INDEX(ip)) { in dtExtendPage()
1708 modify_index(tid, ip, in dtExtendPage()
1722 jfs_info("dtExtendPage: ip:0x%p smp:0x%p sp:0x%p", ip, smp, sp); in dtExtendPage()
1724 BT_MARK_DIRTY(smp, ip); in dtExtendPage()
1728 tlck = txLock(tid, ip, smp, tlckDTREE | type); in dtExtendPage()
1818 BT_MARK_DIRTY(pmp, ip); in dtExtendPage()
1834 tlck = txLock(tid, ip, pmp, tlckDTREE | tlckENTRY); in dtExtendPage()
1871 struct inode *ip, struct dtsplit * split, struct metapage ** rmpp) in dtSplitRoot() argument
1873 struct super_block *sb = ip->i_sb; in dtSplitRoot()
1895 sp = &JFS_IP(ip)->i_dtroot; in dtSplitRoot()
1909 rmp = get_metapage(ip, rbn, xsize, 1); in dtSplitRoot()
1916 rc = dquot_alloc_block(ip, lengthPXD(pxd)); in dtSplitRoot()
1922 BT_MARK_DIRTY(rmp, ip); in dtSplitRoot()
1926 tlck = txLock(tid, ip, rmp, tlckDTREE | tlckNEW); in dtSplitRoot()
1990 if ((rp->header.flag & BT_LEAF) && DO_INDEX(ip)) { in dtSplitRoot()
1998 modify_index(tid, ip, le32_to_cpu(ldtentry->index), in dtSplitRoot()
2019 BT_MARK_DIRTY(smp, ip); in dtSplitRoot()
2023 tlck = txLock(tid, ip, smp, tlckDTREE | tlckNEW | tlckBTROOT); in dtSplitRoot()
2078 struct inode *ip, struct component_name * key, ino_t * ino, int flag) in dtDelete() argument
2101 if ((rc = dtSearch(ip, key, ino, &btstack, flag))) in dtDelete()
2105 DT_GETSEARCH(ip, btstack.top, bn, mp, p, index); in dtDelete()
2112 if (DO_INDEX(ip)) { in dtDelete()
2125 DT_GETPAGE(ip, le64_to_cpu(p->header.next), in dtDelete()
2144 free_index(tid, ip, table_index, next_index); in dtDelete()
2151 rc = dtDeleteUp(tid, ip, mp, p, &btstack); in dtDelete()
2159 BT_MARK_DIRTY(mp, ip); in dtDelete()
2163 tlck = txLock(tid, ip, mp, tlckDTREE | tlckENTRY); in dtDelete()
2199 if (DO_INDEX(ip) && index < p->header.nextindex) { in dtDelete()
2207 modify_index(tid, ip, in dtDelete()
2232 static int dtDeleteUp(tid_t tid, struct inode *ip, in dtDeleteUp() argument
2256 dtInitRoot(tid, ip, PARENT(ip)); in dtDeleteUp()
2273 tlck = txMaplock(tid, ip, tlckDTREE | tlckFREE); in dtDeleteUp()
2280 if ((rc = dtRelink(tid, ip, fp))) { in dtDeleteUp()
2288 dquot_free_block(ip, xlen); in dtDeleteUp()
2303 DT_GETPAGE(ip, parent->bn, mp, PSIZE, p, rc); in dtDeleteUp()
2332 dtInitRoot(tid, ip, PARENT(ip)); in dtDeleteUp()
2348 txMaplock(tid, ip, in dtDeleteUp()
2356 if ((rc = dtRelink(tid, ip, p))) { in dtDeleteUp()
2364 dquot_free_block(ip, xlen); in dtDeleteUp()
2379 BT_MARK_DIRTY(mp, ip); in dtDeleteUp()
2385 tlck = txLock(tid, ip, mp, tlckDTREE | tlckENTRY); in dtDeleteUp()
2427 if (!DO_INDEX(ip)) in dtDeleteUp()
2428 ip->i_size -= PSIZE; in dtDeleteUp()
2444 static int dtRelink(tid_t tid, struct inode *ip, dtpage_t * p) in dtRelink() argument
2458 DT_GETPAGE(ip, nextbn, mp, PSIZE, p, rc); in dtRelink()
2462 BT_MARK_DIRTY(mp, ip); in dtRelink()
2468 tlck = txLock(tid, ip, mp, tlckDTREE | tlckRELINK); in dtRelink()
2470 tlck, ip, mp); in dtRelink()
2487 DT_GETPAGE(ip, prevbn, mp, PSIZE, p, rc); in dtRelink()
2491 BT_MARK_DIRTY(mp, ip); in dtRelink()
2497 tlck = txLock(tid, ip, mp, tlckDTREE | tlckRELINK); in dtRelink()
2499 tlck, ip, mp); in dtRelink()
2523 void dtInitRoot(tid_t tid, struct inode *ip, u32 idotdot) in dtInitRoot() argument
2525 struct jfs_inode_info *jfs_ip = JFS_IP(ip); in dtInitRoot()
2538 if (DO_INDEX(ip)) { in dtInitRoot()
2539 if (!jfs_dirtable_inline(ip)) { in dtInitRoot()
2557 xtTruncate(tid, ip, 0, COMMIT_PWMAP); in dtInitRoot()
2558 set_cflag(COMMIT_Stale, ip); in dtInitRoot()
2562 ip->i_size = 1; in dtInitRoot()
2566 ip->i_size = IDATASIZE; in dtInitRoot()
2573 tlck = txLock(tid, ip, (struct metapage *) & jfs_ip->bxflag, in dtInitRoot()
2704 struct inode *ip = file_inode(file); in jfs_readdir() local
2705 struct nls_table *codepage = JFS_SBI(ip->i_sb)->nls_tab; in jfs_readdir()
2736 if (DO_INDEX(ip)) { in jfs_readdir()
2758 if (dtEmpty(ip) || in jfs_readdir()
2759 (dir_index >= JFS_IP(ip)->next_index)) { in jfs_readdir()
2765 rc = read_index(ip, dir_index, &dirtab_slot); in jfs_readdir()
2771 if (loop_count++ > JFS_IP(ip)->next_index) { in jfs_readdir()
2785 DT_GETPAGE(ip, bn, mp, PSIZE, p, rc); in jfs_readdir()
2802 if (!dir_emit(ctx, ".", 1, ip->i_ino, DT_DIR)) in jfs_readdir()
2809 if (!dir_emit(ctx, "..", 2, PARENT(ip), DT_DIR)) in jfs_readdir()
2815 if (dtEmpty(ip)) { in jfs_readdir()
2820 if ((rc = dtReadFirst(ip, &btstack))) in jfs_readdir()
2823 DT_GETSEARCH(ip, btstack.top, bn, mp, p, index); in jfs_readdir()
2838 if (!dir_emit(ctx, ".", 1, ip->i_ino, DT_DIR)) in jfs_readdir()
2847 if (!dir_emit(ctx, "..", 2, PARENT(ip), DT_DIR)) in jfs_readdir()
2857 if (dtEmpty(ip)) { in jfs_readdir()
2862 if ((rc = dtReadNext(ip, &ctx->pos, &btstack))) { in jfs_readdir()
2869 DT_GETSEARCH(ip, btstack.top, bn, mp, p, index); in jfs_readdir()
2920 JFS_IP(ip)->next_index)) { in jfs_readdir()
2921 if (!page_fixed && !isReadOnly(ip)) { in jfs_readdir()
2959 jfs_error(ip->i_sb, in jfs_readdir()
2961 (long)ip->i_ino, in jfs_readdir()
3011 add_missing_indices(ip, bn); in jfs_readdir()
3020 DT_GETPAGE(ip, bn, mp, PSIZE, p, rc); in jfs_readdir()
3039 static int dtReadFirst(struct inode *ip, struct btstack * btstack) in dtReadFirst() argument
3058 DT_GETPAGE(ip, bn, mp, psize, p, rc); in dtReadFirst()
3080 jfs_error(ip->i_sb, "btstack overrun\n"); in dtReadFirst()
3093 psize = lengthPXD(xd) << JFS_SBI(ip->i_sb)->l2bsize; in dtReadFirst()
3111 static int dtReadNext(struct inode *ip, loff_t * offset, in dtReadNext() argument
3132 if ((rc = dtReadFirst(ip, btstack))) in dtReadNext()
3136 DT_GETSEARCH(ip, btstack->top, bn, mp, p, index); in dtReadNext()
3195 DT_GETPAGE(ip, bn, mp, PSIZE, p, rc); in dtReadNext()
3216 DT_GETPAGE(ip, bn, mp, PSIZE, p, rc); in dtReadNext()
3236 DT_GETPAGE(ip, bn, mp, PSIZE, p, rc); in dtReadNext()
3257 DT_GETPAGE(ip, bn, mp, PSIZE, p, rc); in dtReadNext()
3642 if (data->leaf.ip) { in dtInsertEntry()
3647 data->leaf.ip, in dtInsertEntry()
3726 if ((p->header.flag & BT_LEAF) && data->leaf.ip) { in dtInsertEntry()
3736 modify_index(data->leaf.tid, data->leaf.ip, in dtInsertEntry()
4216 int dtModify(tid_t tid, struct inode *ip, in dtModify() argument
4237 if ((rc = dtSearch(ip, key, orig_ino, &btstack, flag))) in dtModify()
4241 DT_GETSEARCH(ip, btstack.top, bn, mp, p, index); in dtModify()
4243 BT_MARK_DIRTY(mp, ip); in dtModify()
4247 tlck = txLock(tid, ip, mp, tlckDTREE | tlckENTRY); in dtModify()