Lines Matching refs:dentry

15 static int ovl_copy_up_last(struct dentry *dentry, struct iattr *attr,  in ovl_copy_up_last()  argument
19 struct dentry *parent; in ovl_copy_up_last()
23 parent = dget_parent(dentry); in ovl_copy_up_last()
28 ovl_path_lower(dentry, &lowerpath); in ovl_copy_up_last()
36 err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat, attr); in ovl_copy_up_last()
43 int ovl_setattr(struct dentry *dentry, struct iattr *attr) in ovl_setattr() argument
46 struct dentry *upperdentry; in ovl_setattr()
57 err = inode_change_ok(dentry->d_inode, attr); in ovl_setattr()
61 err = ovl_want_write(dentry); in ovl_setattr()
65 err = ovl_copy_up(dentry); in ovl_setattr()
67 upperdentry = ovl_dentry_upper(dentry); in ovl_setattr()
72 ovl_copyattr(upperdentry->d_inode, dentry->d_inode); in ovl_setattr()
75 ovl_drop_write(dentry); in ovl_setattr()
80 static int ovl_getattr(struct vfsmount *mnt, struct dentry *dentry, in ovl_getattr() argument
85 ovl_path_real(dentry, &realpath); in ovl_getattr()
92 struct dentry *alias = NULL; in ovl_permission()
94 struct dentry *realdentry; in ovl_permission()
154 struct dentry *realdentry;
158 static void *ovl_follow_link(struct dentry *dentry, struct nameidata *nd) in ovl_follow_link() argument
161 struct dentry *realdentry; in ovl_follow_link()
164 realdentry = ovl_dentry_real(dentry); in ovl_follow_link()
191 static void ovl_put_link(struct dentry *dentry, struct nameidata *nd, void *c) in ovl_put_link() argument
204 static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) in ovl_readlink() argument
209 ovl_path_real(dentry, &realpath); in ovl_readlink()
210 realinode = realpath.dentry->d_inode; in ovl_readlink()
217 return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); in ovl_readlink()
226 int ovl_setxattr(struct dentry *dentry, const char *name, in ovl_setxattr() argument
230 struct dentry *upperdentry; in ovl_setxattr()
232 err = ovl_want_write(dentry); in ovl_setxattr()
240 err = ovl_copy_up(dentry); in ovl_setxattr()
244 upperdentry = ovl_dentry_upper(dentry); in ovl_setxattr()
248 ovl_drop_write(dentry); in ovl_setxattr()
253 static bool ovl_need_xattr_filter(struct dentry *dentry, in ovl_need_xattr_filter() argument
257 return S_ISDIR(dentry->d_inode->i_mode); in ovl_need_xattr_filter()
262 ssize_t ovl_getxattr(struct dentry *dentry, const char *name, in ovl_getxattr() argument
266 enum ovl_path_type type = ovl_path_real(dentry, &realpath); in ovl_getxattr()
268 if (ovl_need_xattr_filter(dentry, type) && ovl_is_private_xattr(name)) in ovl_getxattr()
271 return vfs_getxattr(realpath.dentry, name, value, size); in ovl_getxattr()
274 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) in ovl_listxattr() argument
277 enum ovl_path_type type = ovl_path_real(dentry, &realpath); in ovl_listxattr()
281 res = vfs_listxattr(realpath.dentry, list, size); in ovl_listxattr()
285 if (!ovl_need_xattr_filter(dentry, type)) in ovl_listxattr()
306 int ovl_removexattr(struct dentry *dentry, const char *name) in ovl_removexattr() argument
310 enum ovl_path_type type = ovl_path_real(dentry, &realpath); in ovl_removexattr()
312 err = ovl_want_write(dentry); in ovl_removexattr()
317 if (ovl_need_xattr_filter(dentry, type) && ovl_is_private_xattr(name)) in ovl_removexattr()
321 err = vfs_getxattr(realpath.dentry, name, NULL, 0); in ovl_removexattr()
325 err = ovl_copy_up(dentry); in ovl_removexattr()
329 ovl_path_upper(dentry, &realpath); in ovl_removexattr()
332 err = vfs_removexattr(realpath.dentry, name); in ovl_removexattr()
334 ovl_drop_write(dentry); in ovl_removexattr()
340 struct dentry *realdentry) in ovl_open_need_copy_up()
354 struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags) in ovl_d_select_inode() argument
360 if (d_is_dir(dentry)) in ovl_d_select_inode()
361 return d_backing_inode(dentry); in ovl_d_select_inode()
363 type = ovl_path_real(dentry, &realpath); in ovl_d_select_inode()
364 if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) { in ovl_d_select_inode()
365 err = ovl_want_write(dentry); in ovl_d_select_inode()
370 err = ovl_copy_up_last(dentry, NULL, true); in ovl_d_select_inode()
372 err = ovl_copy_up(dentry); in ovl_d_select_inode()
373 ovl_drop_write(dentry); in ovl_d_select_inode()
377 ovl_path_upper(dentry, &realpath); in ovl_d_select_inode()
380 return d_backing_inode(realpath.dentry); in ovl_d_select_inode()