Lines Matching refs:dentry

17 void ovl_cleanup(struct inode *wdir, struct dentry *wdentry)  in ovl_cleanup()
34 struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry) in ovl_lookup_temp() argument
36 struct dentry *temp; in ovl_lookup_temp()
39 snprintf(name, sizeof(name), "#%lx", (unsigned long) dentry); in ovl_lookup_temp()
52 static struct dentry *ovl_whiteout(struct dentry *workdir, in ovl_whiteout()
53 struct dentry *dentry) in ovl_whiteout() argument
56 struct dentry *whiteout; in ovl_whiteout()
59 whiteout = ovl_lookup_temp(workdir, dentry); in ovl_whiteout()
72 int ovl_create_real(struct inode *dir, struct dentry *newdentry, in ovl_create_real()
74 struct dentry *hardlink, bool debug) in ovl_create_real()
119 static int ovl_set_opaque(struct dentry *upperdentry) in ovl_set_opaque()
124 static void ovl_remove_opaque(struct dentry *upperdentry) in ovl_remove_opaque()
135 static int ovl_dir_getattr(struct vfsmount *mnt, struct dentry *dentry, in ovl_dir_getattr() argument
142 type = ovl_path_real(dentry, &realpath); in ovl_dir_getattr()
147 stat->dev = dentry->d_sb->s_dev; in ovl_dir_getattr()
148 stat->ino = dentry->d_inode->i_ino; in ovl_dir_getattr()
161 static int ovl_create_upper(struct dentry *dentry, struct inode *inode, in ovl_create_upper() argument
163 struct dentry *hardlink) in ovl_create_upper()
165 struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); in ovl_create_upper()
167 struct dentry *newdentry; in ovl_create_upper()
171 newdentry = lookup_one_len(dentry->d_name.name, upperdir, in ovl_create_upper()
172 dentry->d_name.len); in ovl_create_upper()
180 ovl_dentry_version_inc(dentry->d_parent); in ovl_create_upper()
181 ovl_dentry_update(dentry, newdentry); in ovl_create_upper()
183 d_instantiate(dentry, inode); in ovl_create_upper()
192 static int ovl_lock_rename_workdir(struct dentry *workdir, in ovl_lock_rename_workdir()
193 struct dentry *upperdir) in ovl_lock_rename_workdir()
212 static struct dentry *ovl_clear_empty(struct dentry *dentry, in ovl_clear_empty() argument
215 struct dentry *workdir = ovl_workdir(dentry); in ovl_clear_empty()
217 struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); in ovl_clear_empty()
220 struct dentry *upper; in ovl_clear_empty()
221 struct dentry *opaquedir; in ovl_clear_empty()
232 ovl_path_upper(dentry, &upperpath); in ovl_clear_empty()
240 upper = upperpath.dentry; in ovl_clear_empty()
244 opaquedir = ovl_lookup_temp(workdir, dentry); in ovl_clear_empty()
276 d_drop(dentry); in ovl_clear_empty()
290 static struct dentry *ovl_check_empty_and_clear(struct dentry *dentry) in ovl_check_empty_and_clear() argument
293 struct dentry *ret = NULL; in ovl_check_empty_and_clear()
296 err = ovl_check_empty_dir(dentry, &list); in ovl_check_empty_and_clear()
307 if (ovl_dentry_upper(dentry)) in ovl_check_empty_and_clear()
308 ret = ovl_clear_empty(dentry, &list); in ovl_check_empty_and_clear()
316 static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode, in ovl_create_over_whiteout() argument
318 struct dentry *hardlink) in ovl_create_over_whiteout()
320 struct dentry *workdir = ovl_workdir(dentry); in ovl_create_over_whiteout()
322 struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); in ovl_create_over_whiteout()
324 struct dentry *upper; in ovl_create_over_whiteout()
325 struct dentry *newdentry; in ovl_create_over_whiteout()
335 newdentry = ovl_lookup_temp(workdir, dentry); in ovl_create_over_whiteout()
340 upper = lookup_one_len(dentry->d_name.name, upperdir, in ovl_create_over_whiteout()
341 dentry->d_name.len); in ovl_create_over_whiteout()
366 ovl_dentry_version_inc(dentry->d_parent); in ovl_create_over_whiteout()
367 ovl_dentry_update(dentry, newdentry); in ovl_create_over_whiteout()
369 d_instantiate(dentry, inode); in ovl_create_over_whiteout()
385 static int ovl_create_or_link(struct dentry *dentry, int mode, dev_t rdev, in ovl_create_or_link() argument
386 const char *link, struct dentry *hardlink) in ovl_create_or_link()
396 inode = ovl_new_inode(dentry->d_sb, mode, dentry->d_fsdata); in ovl_create_or_link()
400 err = ovl_copy_up(dentry->d_parent); in ovl_create_or_link()
404 if (!ovl_dentry_is_opaque(dentry)) { in ovl_create_or_link()
405 err = ovl_create_upper(dentry, inode, &stat, link, hardlink); in ovl_create_or_link()
425 err = ovl_create_over_whiteout(dentry, inode, &stat, link, in ovl_create_or_link()
440 static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev, in ovl_create_object() argument
445 err = ovl_want_write(dentry); in ovl_create_object()
447 err = ovl_create_or_link(dentry, mode, rdev, link, NULL); in ovl_create_object()
448 ovl_drop_write(dentry); in ovl_create_object()
454 static int ovl_create(struct inode *dir, struct dentry *dentry, umode_t mode, in ovl_create() argument
457 return ovl_create_object(dentry, (mode & 07777) | S_IFREG, 0, NULL); in ovl_create()
460 static int ovl_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in ovl_mkdir() argument
462 return ovl_create_object(dentry, (mode & 07777) | S_IFDIR, 0, NULL); in ovl_mkdir()
465 static int ovl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, in ovl_mknod() argument
472 return ovl_create_object(dentry, mode, rdev, NULL); in ovl_mknod()
475 static int ovl_symlink(struct inode *dir, struct dentry *dentry, in ovl_symlink() argument
478 return ovl_create_object(dentry, S_IFLNK, 0, link); in ovl_symlink()
481 static int ovl_link(struct dentry *old, struct inode *newdir, in ovl_link()
482 struct dentry *new) in ovl_link()
485 struct dentry *upper; in ovl_link()
504 static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir) in ovl_remove_and_whiteout() argument
506 struct dentry *workdir = ovl_workdir(dentry); in ovl_remove_and_whiteout()
508 struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); in ovl_remove_and_whiteout()
510 struct dentry *whiteout; in ovl_remove_and_whiteout()
511 struct dentry *upper; in ovl_remove_and_whiteout()
512 struct dentry *opaquedir = NULL; in ovl_remove_and_whiteout()
519 if (OVL_TYPE_MERGE_OR_LOWER(ovl_path_type(dentry))) { in ovl_remove_and_whiteout()
520 opaquedir = ovl_check_empty_and_clear(dentry); in ovl_remove_and_whiteout()
532 err = ovl_check_empty_dir(dentry, &list); in ovl_remove_and_whiteout()
543 whiteout = ovl_whiteout(workdir, dentry); in ovl_remove_and_whiteout()
548 upper = ovl_dentry_upper(dentry); in ovl_remove_and_whiteout()
550 upper = lookup_one_len(dentry->d_name.name, upperdir, in ovl_remove_and_whiteout()
551 dentry->d_name.len); in ovl_remove_and_whiteout()
579 ovl_dentry_version_inc(dentry->d_parent); in ovl_remove_and_whiteout()
581 d_drop(dentry); in ovl_remove_and_whiteout()
595 static int ovl_remove_upper(struct dentry *dentry, bool is_dir) in ovl_remove_upper() argument
597 struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent); in ovl_remove_upper()
599 struct dentry *upper = ovl_dentry_upper(dentry); in ovl_remove_upper()
612 ovl_dentry_version_inc(dentry->d_parent); in ovl_remove_upper()
622 d_drop(dentry); in ovl_remove_upper()
628 static inline int ovl_check_sticky(struct dentry *dentry) in ovl_check_sticky() argument
630 struct inode *dir = ovl_dentry_real(dentry->d_parent)->d_inode; in ovl_check_sticky()
631 struct inode *inode = ovl_dentry_real(dentry)->d_inode; in ovl_check_sticky()
639 static int ovl_do_remove(struct dentry *dentry, bool is_dir) in ovl_do_remove() argument
644 err = ovl_check_sticky(dentry); in ovl_do_remove()
648 err = ovl_want_write(dentry); in ovl_do_remove()
652 err = ovl_copy_up(dentry->d_parent); in ovl_do_remove()
656 type = ovl_path_type(dentry); in ovl_do_remove()
658 err = ovl_remove_upper(dentry, is_dir); in ovl_do_remove()
682 err = ovl_remove_and_whiteout(dentry, is_dir); in ovl_do_remove()
688 ovl_drop_write(dentry); in ovl_do_remove()
693 static int ovl_unlink(struct inode *dir, struct dentry *dentry) in ovl_unlink() argument
695 return ovl_do_remove(dentry, false); in ovl_unlink()
698 static int ovl_rmdir(struct inode *dir, struct dentry *dentry) in ovl_rmdir() argument
700 return ovl_do_remove(dentry, true); in ovl_rmdir()
703 static int ovl_rename2(struct inode *olddir, struct dentry *old, in ovl_rename2()
704 struct inode *newdir, struct dentry *new, in ovl_rename2()
710 struct dentry *old_upperdir; in ovl_rename2()
711 struct dentry *new_upperdir; in ovl_rename2()
712 struct dentry *olddentry; in ovl_rename2()
713 struct dentry *newdentry; in ovl_rename2()
714 struct dentry *trap; in ovl_rename2()
722 struct dentry *opaquedir = NULL; in ovl_rename2()