Lines Matching defs:dir
18 * 12/12/98 blf Created. Split out the lookup code from dir.c
147 * @dir: directory inode to search in
152 * This function searches in the directory @dir for a file name @child. When
163 static struct fileIdentDesc *udf_find_entry(struct inode *dir,
181 struct udf_inode_info *dinfo = UDF_I(dir);
184 struct super_block *sb = dir->i_sb;
186 size = udf_ext0_offset(dir) + dir->i_size;
187 f_pos = udf_ext0_offset(dir);
192 if (inode_bmap(dir, f_pos >> sb->s_blocksize_bits, &epos,
221 fi = udf_fileident_read(dir, &f_pos, fibh, cfi, &epos, &eloc,
299 static struct dentry *udf_lookup(struct inode *dir, struct dentry *dentry,
310 fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi);
322 inode = udf_iget(dir->i_sb, &loc);
330 static struct fileIdentDesc *udf_add_entry(struct inode *dir,
335 struct super_block *sb = dir->i_sb;
340 loff_t size = udf_ext0_offset(dir) + dir->i_size;
374 f_pos = udf_ext0_offset(dir);
376 fibh->soffset = fibh->eoffset = f_pos & (dir->i_sb->s_blocksize - 1);
377 dinfo = UDF_I(dir);
379 if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, &epos,
381 block = udf_get_lb_pblock(dir->i_sb,
386 block = udf_get_lb_pblock(dir->i_sb, &eloc, offset);
387 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) {
395 fibh->sbh = fibh->ebh = udf_tread(dir->i_sb, block);
405 fi = udf_fileident_read(dir, &f_pos, fibh, cfi, &epos, &eloc,
420 if (!udf_write_fi(dir, cfi, fi, fibh, NULL,
438 fibh->soffset -= udf_ext0_offset(dir);
439 fibh->eoffset -= udf_ext0_offset(dir);
440 f_pos -= udf_ext0_offset(dir);
445 udf_expand_dir_adinicb(dir, &block, err);
449 epos.offset = udf_file_entry_alloc_offset(dir);
451 udf_current_aext(dir, &epos, &eloc, &elen, 1);
467 udf_ext0_offset(dir) +
472 dir->i_sb->s_blocksize_bits);
483 udf_write_aext(dir, &epos, &eloc, elen, 1);
495 dir->i_sb->s_blocksize_bits);
496 fibh->ebh = udf_bread(dir,
497 f_pos >> dir->i_sb->s_blocksize_bits, 1, err);
504 epos.offset = udf_file_entry_alloc_offset(dir);
508 while (udf_next_aext(dir, &epos, &eloc, &elen, 1) ==
512 dir->i_sb->s_blocksize_bits);
533 if (!udf_write_fi(dir, cfi, fi, fibh, NULL, name)) {
534 dir->i_size += nfidlen;
539 while (udf_next_aext(dir, &epos, &eloc, &elen, 1) ==
542 elen -= dinfo->i_lenExtents - dir->i_size;
547 udf_write_aext(dir, &epos, &eloc, elen, 1);
548 dinfo->i_lenExtents = dir->i_size;
551 mark_inode_dirty(dir);
584 struct inode *dir = d_inode(dentry->d_parent);
589 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
599 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
600 dir->i_ctime = dir->i_mtime = current_time(dir);
601 mark_inode_dirty(dir);
610 static int udf_create(struct inode *dir, struct dentry *dentry, umode_t mode,
613 struct inode *inode = udf_new_inode(dir, mode);
629 static int udf_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
631 struct inode *inode = udf_new_inode(dir, mode);
648 static int udf_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
656 inode = udf_new_inode(dir, mode);
664 static int udf_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
670 struct udf_inode_info *dinfo = UDF_I(dir);
673 inode = udf_new_inode(dir, S_IFDIR | mode);
697 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
709 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
710 inc_nlink(dir);
711 dir->i_ctime = dir->i_mtime = current_time(dir);
712 mark_inode_dirty(dir);
723 static int empty_dir(struct inode *dir)
728 loff_t size = udf_ext0_offset(dir) + dir->i_size;
734 struct udf_inode_info *dinfo = UDF_I(dir);
736 f_pos = udf_ext0_offset(dir);
737 fibh.soffset = fibh.eoffset = f_pos & (dir->i_sb->s_blocksize - 1);
741 else if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits,
744 block = udf_get_lb_pblock(dir->i_sb, &eloc, offset);
745 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) {
753 fibh.sbh = fibh.ebh = udf_tread(dir->i_sb, block);
764 fi = udf_fileident_read(dir, &f_pos, &fibh, &cfi, &epos, &eloc,
792 static int udf_rmdir(struct inode *dir, struct dentry *dentry)
801 fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi);
810 if (udf_get_lb_pblock(dir->i_sb, &tloc, 0) != inode->i_ino)
815 retval = udf_delete_entry(dir, fi, &fibh, &cfi);
823 inode_dec_link_count(dir);
824 inode->i_ctime = dir->i_ctime = dir->i_mtime =
826 mark_inode_dirty(dir);
837 static int udf_unlink(struct inode *dir, struct dentry *dentry)
847 fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi);
857 if (udf_get_lb_pblock(dir->i_sb, &tloc, 0) != inode->i_ino)
865 retval = udf_delete_entry(dir, fi, &fibh, &cfi);
868 dir->i_ctime = dir->i_mtime = current_time(dir);
869 mark_inode_dirty(dir);
871 inode->i_ctime = dir->i_ctime;
883 static int udf_symlink(struct inode *dir, struct dentry *dentry,
886 struct inode *inode = udf_new_inode(dir, S_IFLNK | 0777);
897 struct super_block *sb = dir->i_sb;
1036 static int udf_link(struct dentry *old_dentry, struct inode *dir,
1044 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
1054 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
1055 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
1056 mark_inode_dirty(dir);
1064 dir->i_ctime = dir->i_mtime = current_time(dir);
1065 mark_inode_dirty(dir);