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

Lines Matching refs:dir

24 static void adfs_f_free(struct adfs_dir *dir);
94 adfs_dir_checkbyte(const struct adfs_dir *dir)
96 struct buffer_head * const *bh = dir->bh;
97 const int blocksize_bits = dir->sb->s_blocksize_bits;
153 unsigned int size, struct adfs_dir *dir)
167 dir->nr_buffers = 0;
168 dir->sb = sb;
175 adfs_error(sb, "dir object %lX has a hole at offset %d",
180 dir->bh[blk] = sb_bread(sb, phys);
181 if (!dir->bh[blk])
185 memcpy(&dir->dirhead, bufoff(dir->bh, 0), sizeof(dir->dirhead));
186 memcpy(&dir->dirtail, bufoff(dir->bh, 2007), sizeof(dir->dirtail));
188 if (dir->dirhead.startmasseq != dir->dirtail.new.endmasseq ||
189 memcmp(&dir->dirhead.startname, &dir->dirtail.new.endname, 4))
192 if (memcmp(&dir->dirhead.startname, "Nick", 4) &&
193 memcmp(&dir->dirhead.startname, "Hugo", 4))
196 if (adfs_dir_checkbyte(dir) != dir->dirtail.new.dircheckbyte)
199 dir->nr_buffers = blk;
208 brelse(dir->bh[blk]);
210 dir->sb = NULL;
247 __adfs_dir_get(struct adfs_dir *dir, int pos, struct object_info *obj)
249 struct super_block *sb = dir->sb;
255 if (buffer > dir->nr_buffers)
263 memcpy(&de, dir->bh[buffer]->b_data + offset, thissize);
265 memcpy(((char *)&de) + thissize, dir->bh[buffer + 1]->b_data,
277 __adfs_dir_put(struct adfs_dir *dir, int pos, struct object_info *obj)
279 struct super_block *sb = dir->sb;
285 if (buffer > dir->nr_buffers)
296 memcpy(&de, dir->bh[buffer]->b_data + offset, thissize);
298 memcpy(((char *)&de) + thissize, dir->bh[buffer + 1]->b_data,
309 memcpy(dir->bh[buffer]->b_data + offset, &de, thissize);
311 memcpy(dir->bh[buffer + 1]->b_data, ((char *)&de) + thissize,
322 adfs_dir_find_entry(struct adfs_dir *dir, unsigned long object_id)
331 if (!__adfs_dir_get(dir, pos, &obj))
344 adfs_f_read(struct super_block *sb, unsigned int id, unsigned int sz, struct adfs_dir *dir)
351 ret = adfs_dir_read(sb, id, sz, dir);
355 dir->parent_id = adfs_readval(dir->dirtail.new.dirparent, 3);
361 adfs_f_setpos(struct adfs_dir *dir, unsigned int fpos)
366 dir->pos = 5 + fpos * 26;
371 adfs_f_getnext(struct adfs_dir *dir, struct object_info *obj)
375 ret = __adfs_dir_get(dir, dir->pos, obj);
377 dir->pos += 26;
383 adfs_f_update(struct adfs_dir *dir, struct object_info *obj)
385 struct super_block *sb = dir->sb;
388 ret = adfs_dir_find_entry(dir, obj->file_id);
390 adfs_error(dir->sb, "unable to locate entry to update");
394 __adfs_dir_put(dir, ret, obj);
399 dir->bh[0]->b_data[0] += 1;
400 dir->bh[dir->nr_buffers - 1]->b_data[sb->s_blocksize - 6] += 1;
402 ret = adfs_dir_checkbyte(dir);
406 dir->bh[dir->nr_buffers - 1]->b_data[sb->s_blocksize - 1] = ret;
411 memcpy(&dir->dirhead, bufoff(dir->bh, 0), sizeof(dir->dirhead));
412 memcpy(&dir->dirtail, bufoff(dir->bh, 2007), sizeof(dir->dirtail));
414 if (dir->dirhead.startmasseq != dir->dirtail.new.endmasseq ||
415 memcmp(&dir->dirhead.startname, &dir->dirtail.new.endname, 4))
418 if (memcmp(&dir->dirhead.startname, "Nick", 4) &&
419 memcmp(&dir->dirhead.startname, "Hugo", 4))
422 if (adfs_dir_checkbyte(dir) != dir->dirtail.new.dircheckbyte)
425 for (i = dir->nr_buffers - 1; i >= 0; i--)
426 mark_buffer_dirty(dir->bh[i]);
432 adfs_error(dir->sb, "whoops! I broke a directory!");
437 adfs_f_free(struct adfs_dir *dir)
441 for (i = dir->nr_buffers - 1; i >= 0; i--) {
442 brelse(dir->bh[i]);
443 dir->bh[i] = NULL;
446 dir->nr_buffers = 0;
447 dir->sb = NULL;