Lines Matching refs:dentry

19 int ovl_want_write(struct dentry *dentry)  in ovl_want_write()  argument
21 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_want_write()
25 void ovl_drop_write(struct dentry *dentry) in ovl_drop_write() argument
27 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_drop_write()
31 struct dentry *ovl_workdir(struct dentry *dentry) in ovl_workdir() argument
33 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_workdir()
63 struct dentry *ovl_indexdir(struct super_block *sb) in ovl_indexdir()
97 bool ovl_dentry_remote(struct dentry *dentry) in ovl_dentry_remote() argument
99 return dentry->d_flags & in ovl_dentry_remote()
103 void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry, in ovl_dentry_update_reval() argument
106 struct ovl_entry *oe = OVL_E(dentry); in ovl_dentry_update_reval()
112 flags |= oe->lowerstack[i].dentry->d_flags; in ovl_dentry_update_reval()
114 spin_lock(&dentry->d_lock); in ovl_dentry_update_reval()
115 dentry->d_flags &= ~mask; in ovl_dentry_update_reval()
116 dentry->d_flags |= flags & mask; in ovl_dentry_update_reval()
117 spin_unlock(&dentry->d_lock); in ovl_dentry_update_reval()
120 bool ovl_dentry_weird(struct dentry *dentry) in ovl_dentry_weird() argument
122 return dentry->d_flags & (DCACHE_NEED_AUTOMOUNT | in ovl_dentry_weird()
128 enum ovl_path_type ovl_path_type(struct dentry *dentry) in ovl_path_type() argument
130 struct ovl_entry *oe = dentry->d_fsdata; in ovl_path_type()
133 if (ovl_dentry_upper(dentry)) { in ovl_path_type()
140 if (ovl_test_flag(OVL_CONST_INO, d_inode(dentry))) in ovl_path_type()
142 if (d_is_dir(dentry) || in ovl_path_type()
143 !ovl_has_upperdata(d_inode(dentry))) in ovl_path_type()
153 void ovl_path_upper(struct dentry *dentry, struct path *path) in ovl_path_upper() argument
155 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_path_upper()
158 path->dentry = ovl_dentry_upper(dentry); in ovl_path_upper()
161 void ovl_path_lower(struct dentry *dentry, struct path *path) in ovl_path_lower() argument
163 struct ovl_entry *oe = dentry->d_fsdata; in ovl_path_lower()
167 path->dentry = oe->lowerstack[0].dentry; in ovl_path_lower()
173 void ovl_path_lowerdata(struct dentry *dentry, struct path *path) in ovl_path_lowerdata() argument
175 struct ovl_entry *oe = dentry->d_fsdata; in ovl_path_lowerdata()
179 path->dentry = oe->lowerstack[oe->numlower - 1].dentry; in ovl_path_lowerdata()
185 enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path) in ovl_path_real() argument
187 enum ovl_path_type type = ovl_path_type(dentry); in ovl_path_real()
190 ovl_path_lower(dentry, path); in ovl_path_real()
192 ovl_path_upper(dentry, path); in ovl_path_real()
197 enum ovl_path_type ovl_path_realdata(struct dentry *dentry, struct path *path) in ovl_path_realdata() argument
199 enum ovl_path_type type = ovl_path_type(dentry); in ovl_path_realdata()
201 WARN_ON_ONCE(d_is_dir(dentry)); in ovl_path_realdata()
204 ovl_path_lowerdata(dentry, path); in ovl_path_realdata()
206 ovl_path_upper(dentry, path); in ovl_path_realdata()
211 struct dentry *ovl_dentry_upper(struct dentry *dentry) in ovl_dentry_upper() argument
213 return ovl_upperdentry_dereference(OVL_I(d_inode(dentry))); in ovl_dentry_upper()
216 struct dentry *ovl_dentry_lower(struct dentry *dentry) in ovl_dentry_lower() argument
218 struct ovl_entry *oe = dentry->d_fsdata; in ovl_dentry_lower()
220 return oe->numlower ? oe->lowerstack[0].dentry : NULL; in ovl_dentry_lower()
223 const struct ovl_layer *ovl_layer_lower(struct dentry *dentry) in ovl_layer_lower() argument
225 struct ovl_entry *oe = dentry->d_fsdata; in ovl_layer_lower()
236 struct dentry *ovl_dentry_lowerdata(struct dentry *dentry) in ovl_dentry_lowerdata() argument
238 struct ovl_entry *oe = dentry->d_fsdata; in ovl_dentry_lowerdata()
240 return oe->numlower ? oe->lowerstack[oe->numlower - 1].dentry : NULL; in ovl_dentry_lowerdata()
243 struct dentry *ovl_dentry_real(struct dentry *dentry) in ovl_dentry_real() argument
245 return ovl_dentry_upper(dentry) ?: ovl_dentry_lower(dentry); in ovl_dentry_real()
248 struct dentry *ovl_i_dentry_upper(struct inode *inode) in ovl_i_dentry_upper()
255 path->dentry = ovl_i_dentry_upper(inode); in ovl_i_path_real()
256 if (!path->dentry) { in ovl_i_path_real()
257 path->dentry = OVL_I(inode)->lowerpath.dentry; in ovl_i_path_real()
266 struct dentry *upperdentry = ovl_i_dentry_upper(inode); in ovl_inode_upper()
273 struct dentry *lowerdentry = OVL_I(inode)->lowerpath.dentry; in ovl_inode_lower()
314 void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry) in ovl_dentry_set_flag() argument
316 set_bit(flag, &OVL_E(dentry)->flags); in ovl_dentry_set_flag()
319 void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry) in ovl_dentry_clear_flag() argument
321 clear_bit(flag, &OVL_E(dentry)->flags); in ovl_dentry_clear_flag()
324 bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry) in ovl_dentry_test_flag() argument
326 return test_bit(flag, &OVL_E(dentry)->flags); in ovl_dentry_test_flag()
329 bool ovl_dentry_is_opaque(struct dentry *dentry) in ovl_dentry_is_opaque() argument
331 return ovl_dentry_test_flag(OVL_E_OPAQUE, dentry); in ovl_dentry_is_opaque()
334 bool ovl_dentry_is_whiteout(struct dentry *dentry) in ovl_dentry_is_whiteout() argument
336 return !dentry->d_inode && ovl_dentry_is_opaque(dentry); in ovl_dentry_is_whiteout()
339 void ovl_dentry_set_opaque(struct dentry *dentry) in ovl_dentry_set_opaque() argument
341 ovl_dentry_set_flag(OVL_E_OPAQUE, dentry); in ovl_dentry_set_opaque()
350 bool ovl_dentry_has_upper_alias(struct dentry *dentry) in ovl_dentry_has_upper_alias() argument
352 return ovl_dentry_test_flag(OVL_E_UPPER_ALIAS, dentry); in ovl_dentry_has_upper_alias()
355 void ovl_dentry_set_upper_alias(struct dentry *dentry) in ovl_dentry_set_upper_alias() argument
357 ovl_dentry_set_flag(OVL_E_UPPER_ALIAS, dentry); in ovl_dentry_set_upper_alias()
400 bool ovl_dentry_needs_data_copy_up_locked(struct dentry *dentry, int flags) in ovl_dentry_needs_data_copy_up_locked() argument
405 return !ovl_test_flag(OVL_UPPERDATA, d_inode(dentry)); in ovl_dentry_needs_data_copy_up_locked()
408 bool ovl_dentry_needs_data_copy_up(struct dentry *dentry, int flags) in ovl_dentry_needs_data_copy_up() argument
413 return !ovl_has_upperdata(d_inode(dentry)); in ovl_dentry_needs_data_copy_up()
423 const char *ovl_dentry_get_redirect(struct dentry *dentry) in ovl_dentry_get_redirect() argument
425 return OVL_I(d_inode(dentry))->redirect; in ovl_dentry_get_redirect()
428 void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect) in ovl_dentry_set_redirect() argument
430 struct ovl_inode *oi = OVL_I(d_inode(dentry)); in ovl_dentry_set_redirect()
436 void ovl_inode_update(struct inode *inode, struct dentry *upperdentry) in ovl_inode_update()
453 static void ovl_dir_version_inc(struct dentry *dentry, bool impurity) in ovl_dir_version_inc() argument
455 struct inode *inode = d_inode(dentry); in ovl_dir_version_inc()
458 WARN_ON(!d_is_dir(dentry)); in ovl_dir_version_inc()
466 if (!ovl_dir_is_real(dentry) || impurity) in ovl_dir_version_inc()
470 void ovl_dir_modified(struct dentry *dentry, bool impurity) in ovl_dir_modified() argument
473 ovl_copyattr(d_inode(dentry)); in ovl_dir_modified()
475 ovl_dir_version_inc(dentry, impurity); in ovl_dir_modified()
478 u64 ovl_dentry_version_get(struct dentry *dentry) in ovl_dentry_version_get() argument
480 struct inode *inode = d_inode(dentry); in ovl_dentry_version_get()
486 bool ovl_is_whiteout(struct dentry *dentry) in ovl_is_whiteout() argument
488 struct inode *inode = dentry->d_inode; in ovl_is_whiteout()
495 struct inode *inode = d_inode(path->dentry); in ovl_path_open()
525 static bool ovl_already_copied_up_locked(struct dentry *dentry, int flags) in ovl_already_copied_up_locked() argument
527 bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED; in ovl_already_copied_up_locked()
529 if (ovl_dentry_upper(dentry) && in ovl_already_copied_up_locked()
530 (ovl_dentry_has_upper_alias(dentry) || disconnected) && in ovl_already_copied_up_locked()
531 !ovl_dentry_needs_data_copy_up_locked(dentry, flags)) in ovl_already_copied_up_locked()
537 bool ovl_already_copied_up(struct dentry *dentry, int flags) in ovl_already_copied_up() argument
539 bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED; in ovl_already_copied_up()
554 if (ovl_dentry_upper(dentry) && in ovl_already_copied_up()
555 (ovl_dentry_has_upper_alias(dentry) || disconnected) && in ovl_already_copied_up()
556 !ovl_dentry_needs_data_copy_up(dentry, flags)) in ovl_already_copied_up()
562 int ovl_copy_up_start(struct dentry *dentry, int flags) in ovl_copy_up_start() argument
564 struct inode *inode = d_inode(dentry); in ovl_copy_up_start()
568 if (!err && ovl_already_copied_up_locked(dentry, flags)) { in ovl_copy_up_start()
576 void ovl_copy_up_end(struct dentry *dentry) in ovl_copy_up_end() argument
578 ovl_inode_unlock(d_inode(dentry)); in ovl_copy_up_end()
600 if (!d_is_dir(path->dentry)) in ovl_path_check_dir_xattr()
634 int ovl_check_setxattr(struct ovl_fs *ofs, struct dentry *upperdentry, in ovl_check_setxattr()
654 int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry) in ovl_set_impure() argument
656 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_set_impure()
659 if (ovl_test_flag(OVL_IMPURE, d_inode(dentry))) in ovl_set_impure()
668 ovl_set_flag(OVL_IMPURE, d_inode(dentry)); in ovl_set_impure()
676 void ovl_check_protattr(struct inode *inode, struct dentry *upper) in ovl_check_protattr()
711 int ovl_set_protattr(struct inode *inode, struct dentry *upper, in ovl_set_protattr()
759 bool ovl_inuse_trylock(struct dentry *dentry) in ovl_inuse_trylock() argument
761 struct inode *inode = d_inode(dentry); in ovl_inuse_trylock()
774 void ovl_inuse_unlock(struct dentry *dentry) in ovl_inuse_unlock() argument
776 if (dentry) { in ovl_inuse_unlock()
777 struct inode *inode = d_inode(dentry); in ovl_inuse_unlock()
786 bool ovl_is_inuse(struct dentry *dentry) in ovl_is_inuse() argument
788 struct inode *inode = d_inode(dentry); in ovl_is_inuse()
801 bool ovl_need_index(struct dentry *dentry) in ovl_need_index() argument
803 struct dentry *lower = ovl_dentry_lower(dentry); in ovl_need_index()
805 if (!lower || !ovl_indexdir(dentry->d_sb)) in ovl_need_index()
809 if (ovl_index_all(dentry->d_sb)) in ovl_need_index()
820 static void ovl_cleanup_index(struct dentry *dentry) in ovl_cleanup_index() argument
822 struct ovl_fs *ofs = OVL_FS(dentry->d_sb); in ovl_cleanup_index()
823 struct dentry *indexdir = ovl_indexdir(dentry->d_sb); in ovl_cleanup_index()
825 struct dentry *lowerdentry = ovl_dentry_lower(dentry); in ovl_cleanup_index()
826 struct dentry *upperdentry = ovl_dentry_upper(dentry); in ovl_cleanup_index()
827 struct dentry *index = NULL; in ovl_cleanup_index()
849 set_nlink(d_inode(dentry), inode->i_nlink - 1); in ovl_cleanup_index()
850 ovl_set_nlink_upper(dentry); in ovl_cleanup_index()
859 } else if (ovl_index_all(dentry->d_sb)) { in ovl_cleanup_index()
861 err = ovl_cleanup_and_whiteout(OVL_FS(dentry->d_sb), in ovl_cleanup_index()
878 pr_err("cleanup index of '%pd2' failed (%i)\n", dentry, err); in ovl_cleanup_index()
886 int ovl_nlink_start(struct dentry *dentry) in ovl_nlink_start() argument
888 struct inode *inode = d_inode(dentry); in ovl_nlink_start()
909 if (ovl_need_index(dentry) && !ovl_dentry_has_upper_alias(dentry)) { in ovl_nlink_start()
910 err = ovl_copy_up(dentry); in ovl_nlink_start()
919 if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, inode)) in ovl_nlink_start()
922 old_cred = ovl_override_creds(dentry->d_sb); in ovl_nlink_start()
929 err = ovl_set_nlink_upper(dentry); in ovl_nlink_start()
939 void ovl_nlink_end(struct dentry *dentry) in ovl_nlink_end() argument
941 struct inode *inode = d_inode(dentry); in ovl_nlink_end()
946 old_cred = ovl_override_creds(dentry->d_sb); in ovl_nlink_end()
947 ovl_cleanup_index(dentry); in ovl_nlink_end()
954 int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir) in ovl_lock_rename_workdir()
979 if (!S_ISREG(d_inode(path->dentry)->i_mode)) in ovl_check_metacopy_xattr()
1002 bool ovl_is_metacopy_dentry(struct dentry *dentry) in ovl_is_metacopy_dentry() argument
1004 struct ovl_entry *oe = dentry->d_fsdata; in ovl_is_metacopy_dentry()
1006 if (!d_is_reg(dentry)) in ovl_is_metacopy_dentry()
1009 if (ovl_dentry_upper(dentry)) { in ovl_is_metacopy_dentry()
1010 if (!ovl_has_upperdata(d_inode(dentry))) in ovl_is_metacopy_dentry()
1109 realinode = d_inode(realpath.dentry); in ovl_copyattr()