Lines Matching refs:dentry

18 int ovl_want_write(struct dentry *dentry)  in ovl_want_write()  argument
20 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_want_write()
24 void ovl_drop_write(struct dentry *dentry) in ovl_drop_write() argument
26 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_drop_write()
30 struct dentry *ovl_workdir(struct dentry *dentry) in ovl_workdir() argument
32 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_workdir()
71 struct dentry *ovl_indexdir(struct super_block *sb) in ovl_indexdir()
105 bool ovl_dentry_remote(struct dentry *dentry) in ovl_dentry_remote() argument
107 return dentry->d_flags & in ovl_dentry_remote()
112 bool ovl_dentry_weird(struct dentry *dentry) in ovl_dentry_weird() argument
114 return dentry->d_flags & (DCACHE_NEED_AUTOMOUNT | in ovl_dentry_weird()
120 enum ovl_path_type ovl_path_type(struct dentry *dentry) in ovl_path_type() argument
122 struct ovl_entry *oe = dentry->d_fsdata; in ovl_path_type()
125 if (ovl_dentry_upper(dentry)) { in ovl_path_type()
132 if (ovl_test_flag(OVL_CONST_INO, d_inode(dentry))) in ovl_path_type()
134 if (d_is_dir(dentry) || in ovl_path_type()
135 !ovl_has_upperdata(d_inode(dentry))) in ovl_path_type()
145 void ovl_path_upper(struct dentry *dentry, struct path *path) in ovl_path_upper() argument
147 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_path_upper()
150 path->dentry = ovl_dentry_upper(dentry); in ovl_path_upper()
153 void ovl_path_lower(struct dentry *dentry, struct path *path) in ovl_path_lower() argument
155 struct ovl_entry *oe = dentry->d_fsdata; in ovl_path_lower()
159 path->dentry = oe->lowerstack[0].dentry; in ovl_path_lower()
165 void ovl_path_lowerdata(struct dentry *dentry, struct path *path) in ovl_path_lowerdata() argument
167 struct ovl_entry *oe = dentry->d_fsdata; in ovl_path_lowerdata()
171 path->dentry = oe->lowerstack[oe->numlower - 1].dentry; in ovl_path_lowerdata()
177 enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path) in ovl_path_real() argument
179 enum ovl_path_type type = ovl_path_type(dentry); in ovl_path_real()
182 ovl_path_lower(dentry, path); in ovl_path_real()
184 ovl_path_upper(dentry, path); in ovl_path_real()
189 struct dentry *ovl_dentry_upper(struct dentry *dentry) in ovl_dentry_upper() argument
191 return ovl_upperdentry_dereference(OVL_I(d_inode(dentry))); in ovl_dentry_upper()
194 struct dentry *ovl_dentry_lower(struct dentry *dentry) in ovl_dentry_lower() argument
196 struct ovl_entry *oe = dentry->d_fsdata; in ovl_dentry_lower()
198 return oe->numlower ? oe->lowerstack[0].dentry : NULL; in ovl_dentry_lower()
201 struct ovl_layer *ovl_layer_lower(struct dentry *dentry) in ovl_layer_lower() argument
203 struct ovl_entry *oe = dentry->d_fsdata; in ovl_layer_lower()
214 struct dentry *ovl_dentry_lowerdata(struct dentry *dentry) in ovl_dentry_lowerdata() argument
216 struct ovl_entry *oe = dentry->d_fsdata; in ovl_dentry_lowerdata()
218 return oe->numlower ? oe->lowerstack[oe->numlower - 1].dentry : NULL; in ovl_dentry_lowerdata()
221 struct dentry *ovl_dentry_real(struct dentry *dentry) in ovl_dentry_real() argument
223 return ovl_dentry_upper(dentry) ?: ovl_dentry_lower(dentry); in ovl_dentry_real()
226 struct dentry *ovl_i_dentry_upper(struct inode *inode) in ovl_i_dentry_upper()
233 struct dentry *upperdentry = ovl_i_dentry_upper(inode); in ovl_inode_upper()
279 void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry) in ovl_dentry_set_flag() argument
281 set_bit(flag, &OVL_E(dentry)->flags); in ovl_dentry_set_flag()
284 void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry) in ovl_dentry_clear_flag() argument
286 clear_bit(flag, &OVL_E(dentry)->flags); in ovl_dentry_clear_flag()
289 bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry) in ovl_dentry_test_flag() argument
291 return test_bit(flag, &OVL_E(dentry)->flags); in ovl_dentry_test_flag()
294 bool ovl_dentry_is_opaque(struct dentry *dentry) in ovl_dentry_is_opaque() argument
296 return ovl_dentry_test_flag(OVL_E_OPAQUE, dentry); in ovl_dentry_is_opaque()
299 bool ovl_dentry_is_whiteout(struct dentry *dentry) in ovl_dentry_is_whiteout() argument
301 return !dentry->d_inode && ovl_dentry_is_opaque(dentry); in ovl_dentry_is_whiteout()
304 void ovl_dentry_set_opaque(struct dentry *dentry) in ovl_dentry_set_opaque() argument
306 ovl_dentry_set_flag(OVL_E_OPAQUE, dentry); in ovl_dentry_set_opaque()
315 bool ovl_dentry_has_upper_alias(struct dentry *dentry) in ovl_dentry_has_upper_alias() argument
317 return ovl_dentry_test_flag(OVL_E_UPPER_ALIAS, dentry); in ovl_dentry_has_upper_alias()
320 void ovl_dentry_set_upper_alias(struct dentry *dentry) in ovl_dentry_set_upper_alias() argument
322 ovl_dentry_set_flag(OVL_E_UPPER_ALIAS, dentry); in ovl_dentry_set_upper_alias()
365 bool ovl_dentry_needs_data_copy_up_locked(struct dentry *dentry, int flags) in ovl_dentry_needs_data_copy_up_locked() argument
370 return !ovl_test_flag(OVL_UPPERDATA, d_inode(dentry)); in ovl_dentry_needs_data_copy_up_locked()
373 bool ovl_dentry_needs_data_copy_up(struct dentry *dentry, int flags) in ovl_dentry_needs_data_copy_up() argument
378 return !ovl_has_upperdata(d_inode(dentry)); in ovl_dentry_needs_data_copy_up()
388 const char *ovl_dentry_get_redirect(struct dentry *dentry) in ovl_dentry_get_redirect() argument
390 return OVL_I(d_inode(dentry))->redirect; in ovl_dentry_get_redirect()
393 void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect) in ovl_dentry_set_redirect() argument
395 struct ovl_inode *oi = OVL_I(d_inode(dentry)); in ovl_dentry_set_redirect()
401 void ovl_inode_init(struct inode *inode, struct dentry *upperdentry, in ovl_inode_init()
402 struct dentry *lowerdentry, struct dentry *lowerdata) in ovl_inode_init()
419 void ovl_inode_update(struct inode *inode, struct dentry *upperdentry) in ovl_inode_update()
438 static void ovl_dentry_version_inc(struct dentry *dentry, bool impurity) in ovl_dentry_version_inc() argument
440 struct inode *inode = d_inode(dentry); in ovl_dentry_version_inc()
449 if (OVL_TYPE_MERGE(ovl_path_type(dentry)) || impurity) in ovl_dentry_version_inc()
453 void ovl_dir_modified(struct dentry *dentry, bool impurity) in ovl_dir_modified() argument
456 ovl_copyattr(d_inode(ovl_dentry_upper(dentry)), d_inode(dentry)); in ovl_dir_modified()
458 ovl_dentry_version_inc(dentry, impurity); in ovl_dir_modified()
461 u64 ovl_dentry_version_get(struct dentry *dentry) in ovl_dentry_version_get() argument
463 struct inode *inode = d_inode(dentry); in ovl_dentry_version_get()
469 bool ovl_is_whiteout(struct dentry *dentry) in ovl_is_whiteout() argument
471 struct inode *inode = dentry->d_inode; in ovl_is_whiteout()
482 static bool ovl_already_copied_up_locked(struct dentry *dentry, int flags) in ovl_already_copied_up_locked() argument
484 bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED; in ovl_already_copied_up_locked()
486 if (ovl_dentry_upper(dentry) && in ovl_already_copied_up_locked()
487 (ovl_dentry_has_upper_alias(dentry) || disconnected) && in ovl_already_copied_up_locked()
488 !ovl_dentry_needs_data_copy_up_locked(dentry, flags)) in ovl_already_copied_up_locked()
494 bool ovl_already_copied_up(struct dentry *dentry, int flags) in ovl_already_copied_up() argument
496 bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED; in ovl_already_copied_up()
511 if (ovl_dentry_upper(dentry) && in ovl_already_copied_up()
512 (ovl_dentry_has_upper_alias(dentry) || disconnected) && in ovl_already_copied_up()
513 !ovl_dentry_needs_data_copy_up(dentry, flags)) in ovl_already_copied_up()
519 int ovl_copy_up_start(struct dentry *dentry, int flags) in ovl_copy_up_start() argument
521 struct inode *inode = d_inode(dentry); in ovl_copy_up_start()
525 if (!err && ovl_already_copied_up_locked(dentry, flags)) { in ovl_copy_up_start()
533 void ovl_copy_up_end(struct dentry *dentry) in ovl_copy_up_end() argument
535 ovl_inode_unlock(d_inode(dentry)); in ovl_copy_up_end()
538 bool ovl_check_origin_xattr(struct dentry *dentry) in ovl_check_origin_xattr() argument
542 res = vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0); in ovl_check_origin_xattr()
551 bool ovl_check_dir_xattr(struct dentry *dentry, const char *name) in ovl_check_dir_xattr() argument
556 if (!d_is_dir(dentry)) in ovl_check_dir_xattr()
559 res = vfs_getxattr(dentry, name, &val, 1); in ovl_check_dir_xattr()
566 int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry, in ovl_check_setxattr() argument
571 struct ovl_fs *ofs = dentry->d_sb->s_fs_info; in ovl_check_setxattr()
587 int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry) in ovl_set_impure() argument
591 if (ovl_test_flag(OVL_IMPURE, d_inode(dentry))) in ovl_set_impure()
598 err = ovl_check_setxattr(dentry, upperdentry, OVL_XATTR_IMPURE, in ovl_set_impure()
601 ovl_set_flag(OVL_IMPURE, d_inode(dentry)); in ovl_set_impure()
625 bool ovl_inuse_trylock(struct dentry *dentry) in ovl_inuse_trylock() argument
627 struct inode *inode = d_inode(dentry); in ovl_inuse_trylock()
640 void ovl_inuse_unlock(struct dentry *dentry) in ovl_inuse_unlock() argument
642 if (dentry) { in ovl_inuse_unlock()
643 struct inode *inode = d_inode(dentry); in ovl_inuse_unlock()
652 bool ovl_is_inuse(struct dentry *dentry) in ovl_is_inuse() argument
654 struct inode *inode = d_inode(dentry); in ovl_is_inuse()
667 bool ovl_need_index(struct dentry *dentry) in ovl_need_index() argument
669 struct dentry *lower = ovl_dentry_lower(dentry); in ovl_need_index()
671 if (!lower || !ovl_indexdir(dentry->d_sb)) in ovl_need_index()
675 if (ovl_index_all(dentry->d_sb)) in ovl_need_index()
686 static void ovl_cleanup_index(struct dentry *dentry) in ovl_cleanup_index() argument
688 struct dentry *indexdir = ovl_indexdir(dentry->d_sb); in ovl_cleanup_index()
690 struct dentry *lowerdentry = ovl_dentry_lower(dentry); in ovl_cleanup_index()
691 struct dentry *upperdentry = ovl_dentry_upper(dentry); in ovl_cleanup_index()
692 struct dentry *index = NULL; in ovl_cleanup_index()
714 set_nlink(d_inode(dentry), inode->i_nlink - 1); in ovl_cleanup_index()
715 ovl_set_nlink_upper(dentry); in ovl_cleanup_index()
724 } else if (ovl_index_all(dentry->d_sb)) { in ovl_cleanup_index()
742 pr_err("overlayfs: cleanup index of '%pd2' failed (%i)\n", dentry, err); in ovl_cleanup_index()
750 int ovl_nlink_start(struct dentry *dentry) in ovl_nlink_start() argument
752 struct inode *inode = d_inode(dentry); in ovl_nlink_start()
773 if (ovl_need_index(dentry) && !ovl_dentry_has_upper_alias(dentry)) { in ovl_nlink_start()
774 err = ovl_copy_up(dentry); in ovl_nlink_start()
783 if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, inode)) in ovl_nlink_start()
786 old_cred = ovl_override_creds(dentry->d_sb); in ovl_nlink_start()
793 err = ovl_set_nlink_upper(dentry); in ovl_nlink_start()
803 void ovl_nlink_end(struct dentry *dentry) in ovl_nlink_end() argument
805 struct inode *inode = d_inode(dentry); in ovl_nlink_end()
810 old_cred = ovl_override_creds(dentry->d_sb); in ovl_nlink_end()
811 ovl_cleanup_index(dentry); in ovl_nlink_end()
818 int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir) in ovl_lock_rename_workdir()
838 int ovl_check_metacopy_xattr(struct dentry *dentry) in ovl_check_metacopy_xattr() argument
843 if (!S_ISREG(d_inode(dentry)->i_mode)) in ovl_check_metacopy_xattr()
846 res = vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0); in ovl_check_metacopy_xattr()
859 bool ovl_is_metacopy_dentry(struct dentry *dentry) in ovl_is_metacopy_dentry() argument
861 struct ovl_entry *oe = dentry->d_fsdata; in ovl_is_metacopy_dentry()
863 if (!d_is_reg(dentry)) in ovl_is_metacopy_dentry()
866 if (ovl_dentry_upper(dentry)) { in ovl_is_metacopy_dentry()
867 if (!ovl_has_upperdata(d_inode(dentry))) in ovl_is_metacopy_dentry()
875 ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value, in ovl_getxattr() argument
881 res = vfs_getxattr(dentry, name, NULL, 0); in ovl_getxattr()
893 res = vfs_getxattr(dentry, name, buf, res); in ovl_getxattr()
908 char *ovl_get_redirect_xattr(struct dentry *dentry, int padding) in ovl_get_redirect_xattr() argument
913 res = ovl_getxattr(dentry, OVL_XATTR_REDIRECT, &buf, padding + 1); in ovl_get_redirect_xattr()