Lines Matching refs:dentry

47 int ovl_copy_xattr(struct super_block *sb, struct dentry *old,  in ovl_copy_xattr()
48 struct dentry *new) in ovl_copy_xattr()
157 err = ovl_set_protattr(inode, new->dentry, &oldfa); in ovl_copy_fileattr()
272 static int ovl_set_size(struct dentry *upperdentry, struct kstat *stat) in ovl_set_size()
282 static int ovl_set_timestamps(struct dentry *upperdentry, struct kstat *stat) in ovl_set_timestamps()
294 int ovl_set_attr(struct dentry *upperdentry, struct kstat *stat) in ovl_set_attr()
319 struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real, in ovl_encode_real_fh()
374 int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower, in ovl_set_origin()
375 struct dentry *upper) in ovl_set_origin()
403 static int ovl_set_upper_fh(struct ovl_fs *ofs, struct dentry *upper, in ovl_set_upper_fh()
404 struct dentry *index) in ovl_set_upper_fh()
424 static int ovl_create_index(struct dentry *dentry, struct dentry *origin, in ovl_create_index() argument
425 struct dentry *upper) in ovl_create_index()
427 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_create_index()
428 struct dentry *indexdir = ovl_indexdir(dentry->d_sb); in ovl_create_index()
430 struct dentry *index = NULL; in ovl_create_index()
431 struct dentry *temp = NULL; in ovl_create_index()
443 if (WARN_ON(!d_is_dir(dentry))) in ovl_create_index()
447 if (WARN_ON(ovl_test_flag(OVL_INDEX, d_inode(dentry)))) in ovl_create_index()
480 struct dentry *parent;
481 struct dentry *dentry; member
486 struct dentry *destdir;
488 struct dentry *workdir;
497 struct dentry *upper; in ovl_link_up()
498 struct dentry *upperdir = ovl_dentry_upper(c->parent); in ovl_link_up()
506 err = ovl_set_nlink_lower(c->dentry); in ovl_link_up()
511 upper = lookup_one_len(c->dentry->d_name.name, upperdir, in ovl_link_up()
512 c->dentry->d_name.len); in ovl_link_up()
515 err = ovl_do_link(ovl_dentry_upper(c->dentry), udir, upper); in ovl_link_up()
521 ovl_dentry_set_upper_alias(c->dentry); in ovl_link_up()
528 err = ovl_set_nlink_upper(c->dentry); in ovl_link_up()
533 static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp) in ovl_copy_up_inode()
535 struct ovl_fs *ofs = OVL_FS(c->dentry->d_sb); in ovl_copy_up_inode()
536 struct inode *inode = d_inode(c->dentry); in ovl_copy_up_inode()
540 ovl_path_upper(c->dentry, &upperpath); in ovl_copy_up_inode()
541 if (WARN_ON(upperpath.dentry != NULL)) in ovl_copy_up_inode()
544 upperpath.dentry = temp; in ovl_copy_up_inode()
551 ovl_path_lowerdata(c->dentry, &datapath); in ovl_copy_up_inode()
558 err = ovl_copy_xattr(c->dentry->d_sb, c->lowerpath.dentry, temp); in ovl_copy_up_inode()
580 err = ovl_set_origin(ofs, c->lowerpath.dentry, temp); in ovl_copy_up_inode()
607 static int ovl_prep_cu_creds(struct dentry *dentry, struct ovl_cu_creds *cc) in ovl_prep_cu_creds() argument
612 err = security_inode_copy_up(dentry, &cc->new); in ovl_prep_cu_creds()
638 struct dentry *temp, *upper; in ovl_copy_up_workdir()
653 err = ovl_prep_cu_creds(c->dentry, &cc); in ovl_copy_up_workdir()
669 err = ovl_create_index(c->dentry, c->lowerpath.dentry, temp); in ovl_copy_up_workdir()
685 ovl_set_upperdata(d_inode(c->dentry)); in ovl_copy_up_workdir()
686 inode = d_inode(c->dentry); in ovl_copy_up_workdir()
705 struct dentry *temp, *upper; in ovl_copy_up_tmpfile()
709 err = ovl_prep_cu_creds(c->dentry, &cc); in ovl_copy_up_tmpfile()
737 ovl_set_upperdata(d_inode(c->dentry)); in ovl_copy_up_tmpfile()
738 ovl_inode_update(d_inode(c->dentry), temp); in ovl_copy_up_tmpfile()
759 struct ovl_fs *ofs = OVL_FS(c->dentry->d_sb); in ovl_do_copy_up()
768 if (ovl_need_index(c->dentry)) { in ovl_do_copy_up()
771 c->workdir = ovl_indexdir(c->dentry->d_sb); in ovl_do_copy_up()
780 c->destdir = ovl_indexdir(c->dentry->d_sb); in ovl_do_copy_up()
781 err = ovl_get_index_name(ofs, c->lowerpath.dentry, &c->destname); in ovl_do_copy_up()
806 ovl_set_flag(OVL_INDEX, d_inode(c->dentry)); in ovl_do_copy_up()
810 err = ovl_set_nlink_upper(c->dentry); in ovl_do_copy_up()
819 ovl_dentry_set_upper_alias(c->dentry); in ovl_do_copy_up()
828 static bool ovl_need_meta_copy_up(struct dentry *dentry, umode_t mode, in ovl_need_meta_copy_up() argument
831 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_need_meta_copy_up()
845 static ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value) in ovl_getxattr() argument
850 res = vfs_getxattr(&init_user_ns, dentry, name, NULL, 0); in ovl_getxattr()
859 res = vfs_getxattr(&init_user_ns, dentry, name, buf, res); in ovl_getxattr()
871 struct ovl_fs *ofs = OVL_FS(c->dentry->d_sb); in ovl_copy_up_meta_inode_data()
877 ovl_path_upper(c->dentry, &upperpath); in ovl_copy_up_meta_inode_data()
878 if (WARN_ON(upperpath.dentry == NULL)) in ovl_copy_up_meta_inode_data()
881 ovl_path_lowerdata(c->dentry, &datapath); in ovl_copy_up_meta_inode_data()
882 if (WARN_ON(datapath.dentry == NULL)) in ovl_copy_up_meta_inode_data()
886 err = cap_size = ovl_getxattr(upperpath.dentry, XATTR_NAME_CAPS, in ovl_copy_up_meta_inode_data()
901 err = vfs_setxattr(&init_user_ns, upperpath.dentry, in ovl_copy_up_meta_inode_data()
908 err = ovl_do_removexattr(ofs, upperpath.dentry, OVL_XATTR_METACOPY); in ovl_copy_up_meta_inode_data()
912 ovl_set_upperdata(d_inode(c->dentry)); in ovl_copy_up_meta_inode_data()
919 static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, in ovl_copy_up_one() argument
927 .dentry = dentry, in ovl_copy_up_one()
928 .workdir = ovl_workdir(dentry), in ovl_copy_up_one()
934 ovl_path_lower(dentry, &ctx.lowerpath); in ovl_copy_up_one()
940 ctx.metacopy = ovl_need_meta_copy_up(dentry, ctx.stat.mode, flags); in ovl_copy_up_one()
944 ctx.destdir = parentpath.dentry; in ovl_copy_up_one()
945 ctx.destname = dentry->d_name; in ovl_copy_up_one()
959 ctx.link = vfs_get_link(ctx.lowerpath.dentry, &done); in ovl_copy_up_one()
964 err = ovl_copy_up_start(dentry, flags); in ovl_copy_up_one()
970 if (!ovl_dentry_upper(dentry)) in ovl_copy_up_one()
972 if (!err && parent && !ovl_dentry_has_upper_alias(dentry)) in ovl_copy_up_one()
974 if (!err && ovl_dentry_needs_data_copy_up_locked(dentry, flags)) in ovl_copy_up_one()
976 ovl_copy_up_end(dentry); in ovl_copy_up_one()
983 static int ovl_copy_up_flags(struct dentry *dentry, int flags) in ovl_copy_up_flags() argument
987 bool disconnected = (dentry->d_flags & DCACHE_DISCONNECTED); in ovl_copy_up_flags()
994 if (WARN_ON(disconnected && d_is_dir(dentry))) in ovl_copy_up_flags()
997 old_cred = ovl_override_creds(dentry->d_sb); in ovl_copy_up_flags()
999 struct dentry *next; in ovl_copy_up_flags()
1000 struct dentry *parent = NULL; in ovl_copy_up_flags()
1002 if (ovl_already_copied_up(dentry, flags)) in ovl_copy_up_flags()
1005 next = dget(dentry); in ovl_copy_up_flags()
1027 static bool ovl_open_need_copy_up(struct dentry *dentry, int flags) in ovl_open_need_copy_up() argument
1030 if (ovl_already_copied_up(dentry, flags)) in ovl_open_need_copy_up()
1033 if (special_file(d_inode(dentry)->i_mode)) in ovl_open_need_copy_up()
1042 int ovl_maybe_copy_up(struct dentry *dentry, int flags) in ovl_maybe_copy_up() argument
1046 if (ovl_open_need_copy_up(dentry, flags)) { in ovl_maybe_copy_up()
1047 err = ovl_want_write(dentry); in ovl_maybe_copy_up()
1049 err = ovl_copy_up_flags(dentry, flags); in ovl_maybe_copy_up()
1050 ovl_drop_write(dentry); in ovl_maybe_copy_up()
1057 int ovl_copy_up_with_data(struct dentry *dentry) in ovl_copy_up_with_data() argument
1059 return ovl_copy_up_flags(dentry, O_WRONLY); in ovl_copy_up_with_data()
1062 int ovl_copy_up(struct dentry *dentry) in ovl_copy_up() argument
1064 return ovl_copy_up_flags(dentry, 0); in ovl_copy_up()