Lines Matching +full:de +full:- +full:be

2  * Copyright (c) 2000-2001 Christoph Hellwig.
12 * 2. The name of the author may not be used to endorse or promote products
15 * Alternatively, this software may be distributed under the terms of the
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
32 * Veritas filesystem driver - lookup and other directory related code.
49 #define VXFS_BLOCK_PER_PAGE(sbp) ((PAGE_SIZE / (sbp)->s_blocksize))
67 * vxfs_find_entry - find a mathing directory entry for a dentry
74 * cache entry @dp. @ppp will be filled with the page the return
83 u_long bsize = ip->i_sb->s_blocksize; in vxfs_find_entry()
84 const char *name = dp->d_name.name; in vxfs_find_entry()
85 int namelen = dp->d_name.len; in vxfs_find_entry()
86 loff_t limit = VXFS_DIRROUND(ip->i_size); in vxfs_find_entry()
89 struct vxfs_sb_info *sbi = VXFS_SBI(ip->i_sb); in vxfs_find_entry()
96 pp = vxfs_get_page(ip->i_mapping, pos >> PAGE_SHIFT); in vxfs_find_entry()
102 struct vxfs_direct *de; in vxfs_find_entry() local
104 if ((pos & (bsize - 1)) < 4) { in vxfs_find_entry()
113 de = (struct vxfs_direct *)(kaddr + pg_ofs); in vxfs_find_entry()
115 if (!de->d_reclen) { in vxfs_find_entry()
116 pos += bsize - 1; in vxfs_find_entry()
117 pos &= ~(bsize - 1); in vxfs_find_entry()
121 pg_ofs += fs16_to_cpu(sbi, de->d_reclen); in vxfs_find_entry()
122 pos += fs16_to_cpu(sbi, de->d_reclen); in vxfs_find_entry()
123 if (!de->d_ino) in vxfs_find_entry()
126 if (namelen != fs16_to_cpu(sbi, de->d_namelen)) in vxfs_find_entry()
128 if (!memcmp(name, de->d_name, namelen)) { in vxfs_find_entry()
130 de_exit = de; in vxfs_find_entry()
144 * vxfs_inode_by_name - find inode number for dentry
158 struct vxfs_direct *de; in vxfs_inode_by_name() local
162 de = vxfs_find_entry(dip, dp, &pp); in vxfs_inode_by_name()
163 if (de) { in vxfs_inode_by_name()
164 ino = fs32_to_cpu(VXFS_SBI(dip->i_sb), de->d_ino); in vxfs_inode_by_name()
173 * vxfs_lookup - lookup pathname component
183 * A NULL-pointer on success, else a negative error code encoded
192 if (dp->d_name.len > VXFS_NAMELEN) in vxfs_lookup()
193 return ERR_PTR(-ENAMETOOLONG); in vxfs_lookup()
197 ip = vxfs_iget(dip->i_sb, ino); in vxfs_lookup()
202 * vxfs_readdir - read a directory
218 struct super_block *sbp = ip->i_sb; in vxfs_readdir()
219 u_long bsize = sbp->s_blocksize; in vxfs_readdir()
223 if (ctx->pos == 0) { in vxfs_readdir()
226 ctx->pos++; in vxfs_readdir()
228 if (ctx->pos == 1) { in vxfs_readdir()
229 if (!dir_emit(ctx, "..", 2, VXFS_INO(ip)->vii_dotdot, DT_DIR)) in vxfs_readdir()
231 ctx->pos++; in vxfs_readdir()
234 limit = VXFS_DIRROUND(ip->i_size); in vxfs_readdir()
235 if (ctx->pos > limit) in vxfs_readdir()
238 pos = ctx->pos & ~3L; in vxfs_readdir()
246 pp = vxfs_get_page(ip->i_mapping, pos >> PAGE_SHIFT); in vxfs_readdir()
248 return -ENOMEM; in vxfs_readdir()
253 struct vxfs_direct *de; in vxfs_readdir() local
255 if ((pos & (bsize - 1)) < 4) { in vxfs_readdir()
264 de = (struct vxfs_direct *)(kaddr + pg_ofs); in vxfs_readdir()
266 if (!de->d_reclen) { in vxfs_readdir()
267 pos += bsize - 1; in vxfs_readdir()
268 pos &= ~(bsize - 1); in vxfs_readdir()
272 pg_ofs += fs16_to_cpu(sbi, de->d_reclen); in vxfs_readdir()
273 pos += fs16_to_cpu(sbi, de->d_reclen); in vxfs_readdir()
274 if (!de->d_ino) in vxfs_readdir()
277 rc = dir_emit(ctx, de->d_name, in vxfs_readdir()
278 fs16_to_cpu(sbi, de->d_namelen), in vxfs_readdir()
279 fs32_to_cpu(sbi, de->d_ino), in vxfs_readdir()
283 pos -= fs16_to_cpu(sbi, de->d_reclen); in vxfs_readdir()
292 ctx->pos = pos | 2; in vxfs_readdir()