Lines Matching refs:dir

3  *  linux/fs/adfs/dir.c
17 int adfs_dir_copyfrom(void *dst, struct adfs_dir *dir, unsigned int offset,
20 struct super_block *sb = dir->sb;
26 if (index + (remain < len) >= dir->nr_buffers)
30 memcpy(dst, dir->bhs[index]->b_data + offset, remain);
37 memcpy(dst, dir->bhs[index]->b_data + offset, len);
42 int adfs_dir_copyto(struct adfs_dir *dir, unsigned int offset, const void *src,
45 struct super_block *sb = dir->sb;
51 if (index + (remain < len) >= dir->nr_buffers)
55 memcpy(dir->bhs[index]->b_data + offset, src, remain);
62 memcpy(dir->bhs[index]->b_data + offset, src, len);
67 static void __adfs_dir_cleanup(struct adfs_dir *dir)
69 dir->nr_buffers = 0;
71 if (dir->bhs != dir->bh)
72 kfree(dir->bhs);
73 dir->bhs = NULL;
74 dir->sb = NULL;
77 void adfs_dir_relse(struct adfs_dir *dir)
81 for (i = 0; i < dir->nr_buffers; i++)
82 brelse(dir->bhs[i]);
84 __adfs_dir_cleanup(dir);
87 static void adfs_dir_forget(struct adfs_dir *dir)
91 for (i = 0; i < dir->nr_buffers; i++)
92 bforget(dir->bhs[i]);
94 __adfs_dir_cleanup(dir);
98 unsigned int size, struct adfs_dir *dir)
105 if (num > ARRAY_SIZE(dir->bh)) {
107 if (dir->bhs != dir->bh)
114 if (dir->nr_buffers)
115 memcpy(bhs, dir->bhs, dir->nr_buffers * sizeof(*bhs));
117 dir->bhs = bhs;
120 for (i = dir->nr_buffers; i < num; i++) {
123 adfs_error(sb, "dir %06x has a hole at offset %u",
128 dir->bhs[i] = sb_bread(sb, block);
129 if (!dir->bhs[i]) {
131 "dir %06x failed read at offset %u, mapped block 0x%08x",
136 dir->nr_buffers++;
141 adfs_dir_relse(dir);
147 unsigned int size, struct adfs_dir *dir)
149 dir->sb = sb;
150 dir->bhs = dir->bh;
151 dir->nr_buffers = 0;
153 return ADFS_SB(sb)->s_dir->read(sb, indaddr, size, dir);
157 struct adfs_dir *dir)
161 ret = adfs_dir_read(sb, ADFS_I(inode)->indaddr, inode->i_size, dir);
165 if (ADFS_I(inode)->parent_id != dir->parent_id) {
168 ADFS_I(inode)->parent_id, dir->parent_id);
169 adfs_dir_relse(dir);
176 static void adfs_dir_mark_dirty(struct adfs_dir *dir)
181 for (i = 0; i < dir->nr_buffers; i++)
182 mark_buffer_dirty(dir->bhs[i]);
185 static int adfs_dir_sync(struct adfs_dir *dir)
190 for (i = dir->nr_buffers - 1; i >= 0; i--) {
191 struct buffer_head *bh = dir->bhs[i];
200 void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj)
226 if (!(obj->attr & ADFS_NDA_DIRECTORY) && ADFS_SB(dir->sb)->s_ftsuffix) {
243 struct adfs_dir dir;
247 ret = adfs_dir_read_inode(sb, inode, &dir);
257 if (!dir_emit(ctx, "..", 2, dir.parent_id, DT_DIR))
262 ret = ops->iterate(&dir, ctx);
266 adfs_dir_relse(&dir);
278 struct adfs_dir dir;
288 ret = adfs_dir_read(sb, obj->parent_id, 0, &dir);
292 ret = ops->update(&dir, obj);
296 ret = ops->commit(&dir);
301 adfs_dir_mark_dirty(&dir);
304 ret = adfs_dir_sync(&dir);
306 adfs_dir_relse(&dir);
316 adfs_dir_relse(&dir);
318 adfs_dir_forget(&dir);
353 struct adfs_dir dir;
358 ret = adfs_dir_read_inode(sb, inode, &dir);
362 ret = ops->setpos(&dir, 0);
369 while (ops->getnext(&dir, obj) == 0) {
379 adfs_dir_relse(&dir);
430 adfs_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
436 error = adfs_dir_lookup_byname(dir, &dentry->d_name, &obj);
442 inode = adfs_iget(dir->i_sb, &obj);