Lines Matching refs:dentry
15 static int ovl_copy_up_truncate(struct dentry *dentry) in ovl_copy_up_truncate() argument
18 struct dentry *parent; in ovl_copy_up_truncate()
22 parent = dget_parent(dentry); in ovl_copy_up_truncate()
27 ovl_path_lower(dentry, &lowerpath); in ovl_copy_up_truncate()
33 err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat); in ovl_copy_up_truncate()
40 int ovl_setattr(struct dentry *dentry, struct iattr *attr) in ovl_setattr() argument
43 struct dentry *upperdentry; in ovl_setattr()
54 err = inode_change_ok(dentry->d_inode, attr); in ovl_setattr()
58 err = ovl_want_write(dentry); in ovl_setattr()
62 err = ovl_copy_up(dentry); in ovl_setattr()
64 upperdentry = ovl_dentry_upper(dentry); in ovl_setattr()
69 ovl_copyattr(upperdentry->d_inode, dentry->d_inode); in ovl_setattr()
72 ovl_drop_write(dentry); in ovl_setattr()
77 static int ovl_getattr(struct vfsmount *mnt, struct dentry *dentry, in ovl_getattr() argument
82 ovl_path_real(dentry, &realpath); in ovl_getattr()
89 struct dentry *alias = NULL; in ovl_permission()
91 struct dentry *realdentry; in ovl_permission()
151 struct dentry *realdentry;
155 static const char *ovl_follow_link(struct dentry *dentry, void **cookie) in ovl_follow_link() argument
157 struct dentry *realdentry; in ovl_follow_link()
162 realdentry = ovl_dentry_real(dentry); in ovl_follow_link()
202 static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) in ovl_readlink() argument
207 ovl_path_real(dentry, &realpath); in ovl_readlink()
208 realinode = realpath.dentry->d_inode; in ovl_readlink()
215 return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); in ovl_readlink()
224 int ovl_setxattr(struct dentry *dentry, const char *name, in ovl_setxattr() argument
228 struct dentry *upperdentry; in ovl_setxattr()
230 err = ovl_want_write(dentry); in ovl_setxattr()
238 err = ovl_copy_up(dentry); in ovl_setxattr()
242 upperdentry = ovl_dentry_upper(dentry); in ovl_setxattr()
246 ovl_drop_write(dentry); in ovl_setxattr()
251 static bool ovl_need_xattr_filter(struct dentry *dentry, in ovl_need_xattr_filter() argument
255 return S_ISDIR(dentry->d_inode->i_mode); in ovl_need_xattr_filter()
260 ssize_t ovl_getxattr(struct dentry *dentry, const char *name, in ovl_getxattr() argument
264 enum ovl_path_type type = ovl_path_real(dentry, &realpath); in ovl_getxattr()
266 if (ovl_need_xattr_filter(dentry, type) && ovl_is_private_xattr(name)) in ovl_getxattr()
269 return vfs_getxattr(realpath.dentry, name, value, size); in ovl_getxattr()
272 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) in ovl_listxattr() argument
275 enum ovl_path_type type = ovl_path_real(dentry, &realpath); in ovl_listxattr()
279 res = vfs_listxattr(realpath.dentry, list, size); in ovl_listxattr()
283 if (!ovl_need_xattr_filter(dentry, type)) in ovl_listxattr()
304 int ovl_removexattr(struct dentry *dentry, const char *name) in ovl_removexattr() argument
308 enum ovl_path_type type = ovl_path_real(dentry, &realpath); in ovl_removexattr()
310 err = ovl_want_write(dentry); in ovl_removexattr()
315 if (ovl_need_xattr_filter(dentry, type) && ovl_is_private_xattr(name)) in ovl_removexattr()
319 err = vfs_getxattr(realpath.dentry, name, NULL, 0); in ovl_removexattr()
323 err = ovl_copy_up(dentry); in ovl_removexattr()
327 ovl_path_upper(dentry, &realpath); in ovl_removexattr()
330 err = vfs_removexattr(realpath.dentry, name); in ovl_removexattr()
332 ovl_drop_write(dentry); in ovl_removexattr()
338 struct dentry *realdentry) in ovl_open_need_copy_up()
352 struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags) in ovl_d_select_inode() argument
358 if (d_is_dir(dentry)) in ovl_d_select_inode()
359 return d_backing_inode(dentry); in ovl_d_select_inode()
361 type = ovl_path_real(dentry, &realpath); in ovl_d_select_inode()
362 if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) { in ovl_d_select_inode()
363 err = ovl_want_write(dentry); in ovl_d_select_inode()
368 err = ovl_copy_up_truncate(dentry); in ovl_d_select_inode()
370 err = ovl_copy_up(dentry); in ovl_d_select_inode()
371 ovl_drop_write(dentry); in ovl_d_select_inode()
375 ovl_path_upper(dentry, &realpath); in ovl_d_select_inode()
378 if (realpath.dentry->d_flags & DCACHE_OP_SELECT_INODE) in ovl_d_select_inode()
379 return realpath.dentry->d_op->d_select_inode(realpath.dentry, file_flags); in ovl_d_select_inode()
381 return d_backing_inode(realpath.dentry); in ovl_d_select_inode()