ovl: Move the copy up helpers to copy_up.c
Right now two copy up helpers are in inode.c. Amir suggested it might be better to move these to copy_up.c. There will one more related function which will come in later patch. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
9cec54c83a
commit
d6eac03913
|
@ -779,6 +779,38 @@ int ovl_copy_up_flags(struct dentry *dentry, int flags)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool ovl_open_need_copy_up(struct dentry *dentry, int flags)
|
||||||
|
{
|
||||||
|
/* Copy up of disconnected dentry does not set upper alias */
|
||||||
|
if (ovl_dentry_upper(dentry) &&
|
||||||
|
(ovl_dentry_has_upper_alias(dentry) ||
|
||||||
|
(dentry->d_flags & DCACHE_DISCONNECTED)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (special_file(d_inode(dentry)->i_mode))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!(OPEN_FMODE(flags) & FMODE_WRITE) && !(flags & O_TRUNC))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
if (ovl_open_need_copy_up(dentry, file_flags)) {
|
||||||
|
err = ovl_want_write(dentry);
|
||||||
|
if (!err) {
|
||||||
|
err = ovl_copy_up_flags(dentry, file_flags);
|
||||||
|
ovl_drop_write(dentry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
int ovl_copy_up(struct dentry *dentry)
|
int ovl_copy_up(struct dentry *dentry)
|
||||||
{
|
{
|
||||||
return ovl_copy_up_flags(dentry, 0);
|
return ovl_copy_up_flags(dentry, 0);
|
||||||
|
|
|
@ -399,38 +399,6 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type)
|
||||||
return acl;
|
return acl;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ovl_open_need_copy_up(struct dentry *dentry, int flags)
|
|
||||||
{
|
|
||||||
/* Copy up of disconnected dentry does not set upper alias */
|
|
||||||
if (ovl_dentry_upper(dentry) &&
|
|
||||||
(ovl_dentry_has_upper_alias(dentry) ||
|
|
||||||
(dentry->d_flags & DCACHE_DISCONNECTED)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (special_file(d_inode(dentry)->i_mode))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!(OPEN_FMODE(flags) & FMODE_WRITE) && !(flags & O_TRUNC))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
if (ovl_open_need_copy_up(dentry, file_flags)) {
|
|
||||||
err = ovl_want_write(dentry);
|
|
||||||
if (!err) {
|
|
||||||
err = ovl_copy_up_flags(dentry, file_flags);
|
|
||||||
ovl_drop_write(dentry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
|
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
|
||||||
{
|
{
|
||||||
if (flags & S_ATIME) {
|
if (flags & S_ATIME) {
|
||||||
|
|
|
@ -325,7 +325,6 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
|
||||||
void *value, size_t size);
|
void *value, size_t size);
|
||||||
ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size);
|
ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size);
|
||||||
struct posix_acl *ovl_get_acl(struct inode *inode, int type);
|
struct posix_acl *ovl_get_acl(struct inode *inode, int type);
|
||||||
int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags);
|
|
||||||
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
|
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
|
||||||
bool ovl_is_private_xattr(const char *name);
|
bool ovl_is_private_xattr(const char *name);
|
||||||
|
|
||||||
|
@ -384,6 +383,7 @@ extern const struct file_operations ovl_file_operations;
|
||||||
/* copy_up.c */
|
/* copy_up.c */
|
||||||
int ovl_copy_up(struct dentry *dentry);
|
int ovl_copy_up(struct dentry *dentry);
|
||||||
int ovl_copy_up_flags(struct dentry *dentry, int flags);
|
int ovl_copy_up_flags(struct dentry *dentry, int flags);
|
||||||
|
int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags);
|
||||||
int ovl_copy_xattr(struct dentry *old, struct dentry *new);
|
int ovl_copy_xattr(struct dentry *old, struct dentry *new);
|
||||||
int ovl_set_attr(struct dentry *upper, struct kstat *stat);
|
int ovl_set_attr(struct dentry *upper, struct kstat *stat);
|
||||||
struct ovl_fh *ovl_encode_real_fh(struct dentry *real, bool is_upper);
|
struct ovl_fh *ovl_encode_real_fh(struct dentry *real, bool is_upper);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user