Lines Matching refs:dentry
42 int ovl_copy_xattr(struct dentry *old, struct dentry *new) in ovl_copy_xattr()
183 static int ovl_set_size(struct dentry *upperdentry, struct kstat *stat) in ovl_set_size()
193 static int ovl_set_timestamps(struct dentry *upperdentry, struct kstat *stat) in ovl_set_timestamps()
205 int ovl_set_attr(struct dentry *upperdentry, struct kstat *stat) in ovl_set_attr()
230 struct ovl_fh *ovl_encode_real_fh(struct dentry *real, bool is_upper) in ovl_encode_real_fh()
286 int ovl_set_origin(struct dentry *dentry, struct dentry *lower, in ovl_set_origin() argument
287 struct dentry *upper) in ovl_set_origin()
306 err = ovl_check_setxattr(dentry, upper, OVL_XATTR_ORIGIN, fh, in ovl_set_origin()
314 static int ovl_set_upper_fh(struct dentry *upper, struct dentry *index) in ovl_set_upper_fh()
334 static int ovl_create_index(struct dentry *dentry, struct dentry *origin, in ovl_create_index() argument
335 struct dentry *upper) in ovl_create_index()
337 struct dentry *indexdir = ovl_indexdir(dentry->d_sb); in ovl_create_index()
339 struct dentry *index = NULL; in ovl_create_index()
340 struct dentry *temp = NULL; in ovl_create_index()
352 if (WARN_ON(!d_is_dir(dentry))) in ovl_create_index()
356 if (WARN_ON(ovl_test_flag(OVL_INDEX, d_inode(dentry)))) in ovl_create_index()
389 struct dentry *parent;
390 struct dentry *dentry; member
395 struct dentry *destdir;
397 struct dentry *workdir;
407 struct dentry *upper; in ovl_link_up()
408 struct dentry *upperdir = ovl_dentry_upper(c->parent); in ovl_link_up()
416 err = ovl_set_nlink_lower(c->dentry); in ovl_link_up()
421 upper = lookup_one_len(c->dentry->d_name.name, upperdir, in ovl_link_up()
422 c->dentry->d_name.len); in ovl_link_up()
425 err = ovl_do_link(ovl_dentry_upper(c->dentry), udir, upper); in ovl_link_up()
431 ovl_dentry_set_upper_alias(c->dentry); in ovl_link_up()
438 err = ovl_set_nlink_upper(c->dentry); in ovl_link_up()
443 static int ovl_install_temp(struct ovl_copy_up_ctx *c, struct dentry *temp, in ovl_install_temp()
444 struct dentry **newdentry) in ovl_install_temp()
447 struct dentry *upper; in ovl_install_temp()
466 static struct dentry *ovl_get_tmpfile(struct ovl_copy_up_ctx *c) in ovl_get_tmpfile()
469 struct dentry *temp; in ovl_get_tmpfile()
479 err = security_inode_copy_up(c->dentry, &new_creds); in ovl_get_tmpfile()
500 static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp) in ovl_copy_up_inode()
504 err = ovl_copy_xattr(c->lowerpath.dentry, temp); in ovl_copy_up_inode()
516 err = ovl_set_origin(c->dentry, c->lowerpath.dentry, temp); in ovl_copy_up_inode()
524 ovl_path_upper(c->dentry, &upperpath); in ovl_copy_up_inode()
525 BUG_ON(upperpath.dentry != NULL); in ovl_copy_up_inode()
526 upperpath.dentry = temp; in ovl_copy_up_inode()
528 ovl_path_lowerdata(c->dentry, &datapath); in ovl_copy_up_inode()
535 err = ovl_check_setxattr(c->dentry, temp, OVL_XATTR_METACOPY, in ovl_copy_up_inode()
555 struct dentry *newdentry = NULL; in ovl_copy_up_locked()
556 struct dentry *temp; in ovl_copy_up_locked()
568 err = ovl_create_index(c->dentry, c->lowerpath.dentry, temp); in ovl_copy_up_locked()
584 ovl_set_upperdata(d_inode(c->dentry)); in ovl_copy_up_locked()
585 inode = d_inode(c->dentry); in ovl_copy_up_locked()
610 struct ovl_fs *ofs = c->dentry->d_sb->s_fs_info; in ovl_do_copy_up()
619 if (ovl_need_index(c->dentry)) { in ovl_do_copy_up()
622 c->workdir = ovl_indexdir(c->dentry->d_sb); in ovl_do_copy_up()
631 c->destdir = ovl_indexdir(c->dentry->d_sb); in ovl_do_copy_up()
632 err = ovl_get_index_name(c->lowerpath.dentry, &c->destname); in ovl_do_copy_up()
665 ovl_set_flag(OVL_INDEX, d_inode(c->dentry)); in ovl_do_copy_up()
669 err = ovl_set_nlink_upper(c->dentry); in ovl_do_copy_up()
678 ovl_dentry_set_upper_alias(c->dentry); in ovl_do_copy_up()
687 static bool ovl_need_meta_copy_up(struct dentry *dentry, umode_t mode, in ovl_need_meta_copy_up() argument
690 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_need_meta_copy_up()
710 ovl_path_upper(c->dentry, &upperpath); in ovl_copy_up_meta_inode_data()
711 if (WARN_ON(upperpath.dentry == NULL)) in ovl_copy_up_meta_inode_data()
714 ovl_path_lowerdata(c->dentry, &datapath); in ovl_copy_up_meta_inode_data()
715 if (WARN_ON(datapath.dentry == NULL)) in ovl_copy_up_meta_inode_data()
722 err = vfs_removexattr(upperpath.dentry, OVL_XATTR_METACOPY); in ovl_copy_up_meta_inode_data()
726 ovl_set_upperdata(d_inode(c->dentry)); in ovl_copy_up_meta_inode_data()
730 static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, in ovl_copy_up_one() argument
738 .dentry = dentry, in ovl_copy_up_one()
739 .workdir = ovl_workdir(dentry), in ovl_copy_up_one()
745 ovl_path_lower(dentry, &ctx.lowerpath); in ovl_copy_up_one()
751 ctx.metacopy = ovl_need_meta_copy_up(dentry, ctx.stat.mode, flags); in ovl_copy_up_one()
755 ctx.destdir = parentpath.dentry; in ovl_copy_up_one()
756 ctx.destname = dentry->d_name; in ovl_copy_up_one()
770 ctx.link = vfs_get_link(ctx.lowerpath.dentry, &done); in ovl_copy_up_one()
775 err = ovl_copy_up_start(dentry, flags); in ovl_copy_up_one()
781 if (!ovl_dentry_upper(dentry)) in ovl_copy_up_one()
783 if (!err && parent && !ovl_dentry_has_upper_alias(dentry)) in ovl_copy_up_one()
785 if (!err && ovl_dentry_needs_data_copy_up_locked(dentry, flags)) in ovl_copy_up_one()
787 ovl_copy_up_end(dentry); in ovl_copy_up_one()
794 int ovl_copy_up_flags(struct dentry *dentry, int flags) in ovl_copy_up_flags() argument
797 const struct cred *old_cred = ovl_override_creds(dentry->d_sb); in ovl_copy_up_flags()
798 bool disconnected = (dentry->d_flags & DCACHE_DISCONNECTED); in ovl_copy_up_flags()
805 if (WARN_ON(disconnected && d_is_dir(dentry))) in ovl_copy_up_flags()
809 struct dentry *next; in ovl_copy_up_flags()
810 struct dentry *parent = NULL; in ovl_copy_up_flags()
812 if (ovl_already_copied_up(dentry, flags)) in ovl_copy_up_flags()
815 next = dget(dentry); in ovl_copy_up_flags()
837 static bool ovl_open_need_copy_up(struct dentry *dentry, int flags) in ovl_open_need_copy_up() argument
840 if (ovl_already_copied_up(dentry, flags)) in ovl_open_need_copy_up()
843 if (special_file(d_inode(dentry)->i_mode)) in ovl_open_need_copy_up()
852 int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags) in ovl_open_maybe_copy_up() argument
856 if (ovl_open_need_copy_up(dentry, file_flags)) { in ovl_open_maybe_copy_up()
857 err = ovl_want_write(dentry); in ovl_open_maybe_copy_up()
859 err = ovl_copy_up_flags(dentry, file_flags); in ovl_open_maybe_copy_up()
860 ovl_drop_write(dentry); in ovl_open_maybe_copy_up()
867 int ovl_copy_up_with_data(struct dentry *dentry) in ovl_copy_up_with_data() argument
869 return ovl_copy_up_flags(dentry, O_WRONLY); in ovl_copy_up_with_data()
872 int ovl_copy_up(struct dentry *dentry) in ovl_copy_up() argument
874 return ovl_copy_up_flags(dentry, 0); in ovl_copy_up()