0001
0002
0003
0004
0005
0006
0007 #include <linux/kernel.h>
0008 #include <linux/uuid.h>
0009 #include <linux/fs.h>
0010 #include <linux/namei.h>
0011 #include "ovl_entry.h"
0012
0013 #undef pr_fmt
0014 #define pr_fmt(fmt) "overlayfs: " fmt
0015
0016 enum ovl_path_type {
0017 __OVL_PATH_UPPER = (1 << 0),
0018 __OVL_PATH_MERGE = (1 << 1),
0019 __OVL_PATH_ORIGIN = (1 << 2),
0020 };
0021
0022 #define OVL_TYPE_UPPER(type) ((type) & __OVL_PATH_UPPER)
0023 #define OVL_TYPE_MERGE(type) ((type) & __OVL_PATH_MERGE)
0024 #define OVL_TYPE_ORIGIN(type) ((type) & __OVL_PATH_ORIGIN)
0025
0026 #define OVL_XATTR_NAMESPACE "overlay."
0027 #define OVL_XATTR_TRUSTED_PREFIX XATTR_TRUSTED_PREFIX OVL_XATTR_NAMESPACE
0028 #define OVL_XATTR_USER_PREFIX XATTR_USER_PREFIX OVL_XATTR_NAMESPACE
0029
0030 enum ovl_xattr {
0031 OVL_XATTR_OPAQUE,
0032 OVL_XATTR_REDIRECT,
0033 OVL_XATTR_ORIGIN,
0034 OVL_XATTR_IMPURE,
0035 OVL_XATTR_NLINK,
0036 OVL_XATTR_UPPER,
0037 OVL_XATTR_METACOPY,
0038 OVL_XATTR_PROTATTR,
0039 };
0040
0041 enum ovl_inode_flag {
0042
0043 OVL_IMPURE,
0044
0045 OVL_WHITEOUTS,
0046 OVL_INDEX,
0047 OVL_UPPERDATA,
0048
0049 OVL_CONST_INO,
0050 };
0051
0052 enum ovl_entry_flag {
0053 OVL_E_UPPER_ALIAS,
0054 OVL_E_OPAQUE,
0055 OVL_E_CONNECTED,
0056 };
0057
0058 enum {
0059 OVL_XINO_OFF,
0060 OVL_XINO_AUTO,
0061 OVL_XINO_ON,
0062 };
0063
0064
0065
0066
0067
0068
0069
0070 #define OVL_FH_VERSION 0
0071 #define OVL_FH_MAGIC 0xfb
0072
0073
0074 #define OVL_FH_FLAG_BIG_ENDIAN (1 << 0)
0075 #define OVL_FH_FLAG_ANY_ENDIAN (1 << 1)
0076
0077 #define OVL_FH_FLAG_PATH_UPPER (1 << 2)
0078
0079 #define OVL_FH_FLAG_ALL (OVL_FH_FLAG_BIG_ENDIAN | OVL_FH_FLAG_ANY_ENDIAN | \
0080 OVL_FH_FLAG_PATH_UPPER)
0081
0082 #if defined(__LITTLE_ENDIAN)
0083 #define OVL_FH_FLAG_CPU_ENDIAN 0
0084 #elif defined(__BIG_ENDIAN)
0085 #define OVL_FH_FLAG_CPU_ENDIAN OVL_FH_FLAG_BIG_ENDIAN
0086 #else
0087 #error Endianness not defined
0088 #endif
0089
0090
0091 #define OVL_FILEID_V0 0xfb
0092
0093 #define OVL_FILEID_V1 0xf8
0094
0095
0096 struct ovl_fb {
0097 u8 version;
0098 u8 magic;
0099 u8 len;
0100 u8 flags;
0101 u8 type;
0102 uuid_t uuid;
0103 u32 fid[];
0104 } __packed;
0105
0106
0107 struct ovl_fh {
0108 u8 padding[3];
0109 union {
0110 struct ovl_fb fb;
0111 u8 buf[0];
0112 };
0113 } __packed;
0114
0115 #define OVL_FH_WIRE_OFFSET offsetof(struct ovl_fh, fb)
0116 #define OVL_FH_LEN(fh) (OVL_FH_WIRE_OFFSET + (fh)->fb.len)
0117 #define OVL_FH_FID_OFFSET (OVL_FH_WIRE_OFFSET + \
0118 offsetof(struct ovl_fb, fid))
0119
0120 extern const char *const ovl_xattr_table[][2];
0121 static inline const char *ovl_xattr(struct ovl_fs *ofs, enum ovl_xattr ox)
0122 {
0123 return ovl_xattr_table[ox][ofs->config.userxattr];
0124 }
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138 static inline int ovl_do_notify_change(struct ovl_fs *ofs,
0139 struct dentry *upperdentry,
0140 struct iattr *attr)
0141 {
0142 return notify_change(ovl_upper_mnt_userns(ofs), upperdentry, attr, NULL);
0143 }
0144
0145 static inline int ovl_do_rmdir(struct ovl_fs *ofs,
0146 struct inode *dir, struct dentry *dentry)
0147 {
0148 int err = vfs_rmdir(ovl_upper_mnt_userns(ofs), dir, dentry);
0149
0150 pr_debug("rmdir(%pd2) = %i\n", dentry, err);
0151 return err;
0152 }
0153
0154 static inline int ovl_do_unlink(struct ovl_fs *ofs, struct inode *dir,
0155 struct dentry *dentry)
0156 {
0157 int err = vfs_unlink(ovl_upper_mnt_userns(ofs), dir, dentry, NULL);
0158
0159 pr_debug("unlink(%pd2) = %i\n", dentry, err);
0160 return err;
0161 }
0162
0163 static inline int ovl_do_link(struct ovl_fs *ofs, struct dentry *old_dentry,
0164 struct inode *dir, struct dentry *new_dentry)
0165 {
0166 int err = vfs_link(old_dentry, ovl_upper_mnt_userns(ofs), dir, new_dentry, NULL);
0167
0168 pr_debug("link(%pd2, %pd2) = %i\n", old_dentry, new_dentry, err);
0169 return err;
0170 }
0171
0172 static inline int ovl_do_create(struct ovl_fs *ofs,
0173 struct inode *dir, struct dentry *dentry,
0174 umode_t mode)
0175 {
0176 int err = vfs_create(ovl_upper_mnt_userns(ofs), dir, dentry, mode, true);
0177
0178 pr_debug("create(%pd2, 0%o) = %i\n", dentry, mode, err);
0179 return err;
0180 }
0181
0182 static inline int ovl_do_mkdir(struct ovl_fs *ofs,
0183 struct inode *dir, struct dentry *dentry,
0184 umode_t mode)
0185 {
0186 int err = vfs_mkdir(ovl_upper_mnt_userns(ofs), dir, dentry, mode);
0187 pr_debug("mkdir(%pd2, 0%o) = %i\n", dentry, mode, err);
0188 return err;
0189 }
0190
0191 static inline int ovl_do_mknod(struct ovl_fs *ofs,
0192 struct inode *dir, struct dentry *dentry,
0193 umode_t mode, dev_t dev)
0194 {
0195 int err = vfs_mknod(ovl_upper_mnt_userns(ofs), dir, dentry, mode, dev);
0196
0197 pr_debug("mknod(%pd2, 0%o, 0%o) = %i\n", dentry, mode, dev, err);
0198 return err;
0199 }
0200
0201 static inline int ovl_do_symlink(struct ovl_fs *ofs,
0202 struct inode *dir, struct dentry *dentry,
0203 const char *oldname)
0204 {
0205 int err = vfs_symlink(ovl_upper_mnt_userns(ofs), dir, dentry, oldname);
0206
0207 pr_debug("symlink(\"%s\", %pd2) = %i\n", oldname, dentry, err);
0208 return err;
0209 }
0210
0211 static inline ssize_t ovl_do_getxattr(struct path *path, const char *name,
0212 void *value, size_t size)
0213 {
0214 int err, len;
0215
0216 WARN_ON(path->dentry->d_sb != path->mnt->mnt_sb);
0217
0218 err = vfs_getxattr(mnt_user_ns(path->mnt), path->dentry,
0219 name, value, size);
0220 len = (value && err > 0) ? err : 0;
0221
0222 pr_debug("getxattr(%pd2, \"%s\", \"%*pE\", %zu, 0) = %i\n",
0223 path->dentry, name, min(len, 48), value, size, err);
0224 return err;
0225 }
0226
0227 static inline ssize_t ovl_getxattr_upper(struct ovl_fs *ofs,
0228 struct dentry *upperdentry,
0229 enum ovl_xattr ox, void *value,
0230 size_t size)
0231 {
0232 struct path upperpath = {
0233 .dentry = upperdentry,
0234 .mnt = ovl_upper_mnt(ofs),
0235 };
0236
0237 return ovl_do_getxattr(&upperpath, ovl_xattr(ofs, ox), value, size);
0238 }
0239
0240 static inline ssize_t ovl_path_getxattr(struct ovl_fs *ofs,
0241 struct path *path,
0242 enum ovl_xattr ox, void *value,
0243 size_t size)
0244 {
0245 return ovl_do_getxattr(path, ovl_xattr(ofs, ox), value, size);
0246 }
0247
0248 static inline int ovl_do_setxattr(struct ovl_fs *ofs, struct dentry *dentry,
0249 const char *name, const void *value,
0250 size_t size, int flags)
0251 {
0252 int err = vfs_setxattr(ovl_upper_mnt_userns(ofs), dentry, name,
0253 (void *)value, size, flags);
0254
0255 pr_debug("setxattr(%pd2, \"%s\", \"%*pE\", %zu, %d) = %i\n",
0256 dentry, name, min((int)size, 48), value, size, flags, err);
0257 return err;
0258 }
0259
0260 static inline int ovl_setxattr(struct ovl_fs *ofs, struct dentry *dentry,
0261 enum ovl_xattr ox, const void *value,
0262 size_t size)
0263 {
0264 return ovl_do_setxattr(ofs, dentry, ovl_xattr(ofs, ox), value, size, 0);
0265 }
0266
0267 static inline int ovl_do_removexattr(struct ovl_fs *ofs, struct dentry *dentry,
0268 const char *name)
0269 {
0270 int err = vfs_removexattr(ovl_upper_mnt_userns(ofs), dentry, name);
0271 pr_debug("removexattr(%pd2, \"%s\") = %i\n", dentry, name, err);
0272 return err;
0273 }
0274
0275 static inline int ovl_removexattr(struct ovl_fs *ofs, struct dentry *dentry,
0276 enum ovl_xattr ox)
0277 {
0278 return ovl_do_removexattr(ofs, dentry, ovl_xattr(ofs, ox));
0279 }
0280
0281 static inline int ovl_do_rename(struct ovl_fs *ofs, struct inode *olddir,
0282 struct dentry *olddentry, struct inode *newdir,
0283 struct dentry *newdentry, unsigned int flags)
0284 {
0285 int err;
0286 struct renamedata rd = {
0287 .old_mnt_userns = ovl_upper_mnt_userns(ofs),
0288 .old_dir = olddir,
0289 .old_dentry = olddentry,
0290 .new_mnt_userns = ovl_upper_mnt_userns(ofs),
0291 .new_dir = newdir,
0292 .new_dentry = newdentry,
0293 .flags = flags,
0294 };
0295
0296 pr_debug("rename(%pd2, %pd2, 0x%x)\n", olddentry, newdentry, flags);
0297 err = vfs_rename(&rd);
0298 if (err) {
0299 pr_debug("...rename(%pd2, %pd2, ...) = %i\n",
0300 olddentry, newdentry, err);
0301 }
0302 return err;
0303 }
0304
0305 static inline int ovl_do_whiteout(struct ovl_fs *ofs,
0306 struct inode *dir, struct dentry *dentry)
0307 {
0308 int err = vfs_whiteout(ovl_upper_mnt_userns(ofs), dir, dentry);
0309 pr_debug("whiteout(%pd2) = %i\n", dentry, err);
0310 return err;
0311 }
0312
0313 static inline struct dentry *ovl_do_tmpfile(struct ovl_fs *ofs,
0314 struct dentry *dentry, umode_t mode)
0315 {
0316 struct dentry *ret = vfs_tmpfile(ovl_upper_mnt_userns(ofs), dentry, mode, 0);
0317 int err = PTR_ERR_OR_ZERO(ret);
0318
0319 pr_debug("tmpfile(%pd2, 0%o) = %i\n", dentry, mode, err);
0320 return ret;
0321 }
0322
0323 static inline struct dentry *ovl_lookup_upper(struct ovl_fs *ofs,
0324 const char *name,
0325 struct dentry *base, int len)
0326 {
0327 return lookup_one(ovl_upper_mnt_userns(ofs), name, base, len);
0328 }
0329
0330 static inline bool ovl_open_flags_need_copy_up(int flags)
0331 {
0332 if (!flags)
0333 return false;
0334
0335 return ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC));
0336 }
0337
0338 static inline bool ovl_allow_offline_changes(struct ovl_fs *ofs)
0339 {
0340
0341
0342
0343
0344
0345 return (!ofs->config.index && !ofs->config.metacopy &&
0346 !ofs->config.redirect_dir && ofs->config.xino != OVL_XINO_ON);
0347 }
0348
0349
0350
0351 int ovl_want_write(struct dentry *dentry);
0352 void ovl_drop_write(struct dentry *dentry);
0353 struct dentry *ovl_workdir(struct dentry *dentry);
0354 const struct cred *ovl_override_creds(struct super_block *sb);
0355 int ovl_can_decode_fh(struct super_block *sb);
0356 struct dentry *ovl_indexdir(struct super_block *sb);
0357 bool ovl_index_all(struct super_block *sb);
0358 bool ovl_verify_lower(struct super_block *sb);
0359 struct ovl_entry *ovl_alloc_entry(unsigned int numlower);
0360 bool ovl_dentry_remote(struct dentry *dentry);
0361 void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry,
0362 unsigned int mask);
0363 bool ovl_dentry_weird(struct dentry *dentry);
0364 enum ovl_path_type ovl_path_type(struct dentry *dentry);
0365 void ovl_path_upper(struct dentry *dentry, struct path *path);
0366 void ovl_path_lower(struct dentry *dentry, struct path *path);
0367 void ovl_path_lowerdata(struct dentry *dentry, struct path *path);
0368 void ovl_i_path_real(struct inode *inode, struct path *path);
0369 enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path);
0370 enum ovl_path_type ovl_path_realdata(struct dentry *dentry, struct path *path);
0371 struct dentry *ovl_dentry_upper(struct dentry *dentry);
0372 struct dentry *ovl_dentry_lower(struct dentry *dentry);
0373 struct dentry *ovl_dentry_lowerdata(struct dentry *dentry);
0374 const struct ovl_layer *ovl_i_layer_lower(struct inode *inode);
0375 const struct ovl_layer *ovl_layer_lower(struct dentry *dentry);
0376 struct dentry *ovl_dentry_real(struct dentry *dentry);
0377 struct dentry *ovl_i_dentry_upper(struct inode *inode);
0378 struct inode *ovl_inode_upper(struct inode *inode);
0379 struct inode *ovl_inode_lower(struct inode *inode);
0380 struct inode *ovl_inode_lowerdata(struct inode *inode);
0381 struct inode *ovl_inode_real(struct inode *inode);
0382 struct inode *ovl_inode_realdata(struct inode *inode);
0383 struct ovl_dir_cache *ovl_dir_cache(struct inode *inode);
0384 void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache);
0385 void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry);
0386 void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry);
0387 bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry);
0388 bool ovl_dentry_is_opaque(struct dentry *dentry);
0389 bool ovl_dentry_is_whiteout(struct dentry *dentry);
0390 void ovl_dentry_set_opaque(struct dentry *dentry);
0391 bool ovl_dentry_has_upper_alias(struct dentry *dentry);
0392 void ovl_dentry_set_upper_alias(struct dentry *dentry);
0393 bool ovl_dentry_needs_data_copy_up(struct dentry *dentry, int flags);
0394 bool ovl_dentry_needs_data_copy_up_locked(struct dentry *dentry, int flags);
0395 bool ovl_has_upperdata(struct inode *inode);
0396 void ovl_set_upperdata(struct inode *inode);
0397 bool ovl_redirect_dir(struct super_block *sb);
0398 const char *ovl_dentry_get_redirect(struct dentry *dentry);
0399 void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect);
0400 void ovl_inode_update(struct inode *inode, struct dentry *upperdentry);
0401 void ovl_dir_modified(struct dentry *dentry, bool impurity);
0402 u64 ovl_dentry_version_get(struct dentry *dentry);
0403 bool ovl_is_whiteout(struct dentry *dentry);
0404 struct file *ovl_path_open(struct path *path, int flags);
0405 int ovl_copy_up_start(struct dentry *dentry, int flags);
0406 void ovl_copy_up_end(struct dentry *dentry);
0407 bool ovl_already_copied_up(struct dentry *dentry, int flags);
0408 bool ovl_path_check_dir_xattr(struct ovl_fs *ofs, struct path *path,
0409 enum ovl_xattr ox);
0410 bool ovl_path_check_origin_xattr(struct ovl_fs *ofs, struct path *path);
0411
0412 static inline bool ovl_check_origin_xattr(struct ovl_fs *ofs,
0413 struct dentry *upperdentry)
0414 {
0415 struct path upperpath = {
0416 .dentry = upperdentry,
0417 .mnt = ovl_upper_mnt(ofs),
0418 };
0419 return ovl_path_check_origin_xattr(ofs, &upperpath);
0420 }
0421
0422 int ovl_check_setxattr(struct ovl_fs *ofs, struct dentry *upperdentry,
0423 enum ovl_xattr ox, const void *value, size_t size,
0424 int xerr);
0425 int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry);
0426 bool ovl_inuse_trylock(struct dentry *dentry);
0427 void ovl_inuse_unlock(struct dentry *dentry);
0428 bool ovl_is_inuse(struct dentry *dentry);
0429 bool ovl_need_index(struct dentry *dentry);
0430 int ovl_nlink_start(struct dentry *dentry);
0431 void ovl_nlink_end(struct dentry *dentry);
0432 int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir);
0433 int ovl_check_metacopy_xattr(struct ovl_fs *ofs, struct path *path);
0434 bool ovl_is_metacopy_dentry(struct dentry *dentry);
0435 char *ovl_get_redirect_xattr(struct ovl_fs *ofs, struct path *path, int padding);
0436 int ovl_sync_status(struct ovl_fs *ofs);
0437
0438 static inline void ovl_set_flag(unsigned long flag, struct inode *inode)
0439 {
0440 set_bit(flag, &OVL_I(inode)->flags);
0441 }
0442
0443 static inline void ovl_clear_flag(unsigned long flag, struct inode *inode)
0444 {
0445 clear_bit(flag, &OVL_I(inode)->flags);
0446 }
0447
0448 static inline bool ovl_test_flag(unsigned long flag, struct inode *inode)
0449 {
0450 return test_bit(flag, &OVL_I(inode)->flags);
0451 }
0452
0453 static inline bool ovl_is_impuredir(struct super_block *sb,
0454 struct dentry *upperdentry)
0455 {
0456 struct ovl_fs *ofs = OVL_FS(sb);
0457 struct path upperpath = {
0458 .dentry = upperdentry,
0459 .mnt = ovl_upper_mnt(ofs),
0460 };
0461
0462 return ovl_path_check_dir_xattr(ofs, &upperpath, OVL_XATTR_IMPURE);
0463 }
0464
0465
0466
0467
0468
0469
0470 static inline bool ovl_xino_warn(struct super_block *sb)
0471 {
0472 return OVL_FS(sb)->config.xino == OVL_XINO_ON;
0473 }
0474
0475
0476 static inline bool ovl_same_fs(struct super_block *sb)
0477 {
0478 return OVL_FS(sb)->xino_mode == 0;
0479 }
0480
0481
0482 static inline bool ovl_same_dev(struct super_block *sb)
0483 {
0484 return OVL_FS(sb)->xino_mode >= 0;
0485 }
0486
0487 static inline unsigned int ovl_xino_bits(struct super_block *sb)
0488 {
0489 return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0;
0490 }
0491
0492 static inline void ovl_inode_lock(struct inode *inode)
0493 {
0494 mutex_lock(&OVL_I(inode)->lock);
0495 }
0496
0497 static inline int ovl_inode_lock_interruptible(struct inode *inode)
0498 {
0499 return mutex_lock_interruptible(&OVL_I(inode)->lock);
0500 }
0501
0502 static inline void ovl_inode_unlock(struct inode *inode)
0503 {
0504 mutex_unlock(&OVL_I(inode)->lock);
0505 }
0506
0507
0508
0509 int ovl_check_fb_len(struct ovl_fb *fb, int fb_len);
0510
0511 static inline int ovl_check_fh_len(struct ovl_fh *fh, int fh_len)
0512 {
0513 if (fh_len < sizeof(struct ovl_fh))
0514 return -EINVAL;
0515
0516 return ovl_check_fb_len(&fh->fb, fh_len - OVL_FH_WIRE_OFFSET);
0517 }
0518
0519 struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh,
0520 struct vfsmount *mnt, bool connected);
0521 int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected,
0522 struct dentry *upperdentry, struct ovl_path **stackp);
0523 int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry,
0524 enum ovl_xattr ox, struct dentry *real, bool is_upper,
0525 bool set);
0526 struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index);
0527 int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index);
0528 int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin,
0529 struct qstr *name);
0530 struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh);
0531 struct dentry *ovl_lookup_index(struct ovl_fs *ofs, struct dentry *upper,
0532 struct dentry *origin, bool verify);
0533 int ovl_path_next(int idx, struct dentry *dentry, struct path *path);
0534 struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
0535 unsigned int flags);
0536 bool ovl_lower_positive(struct dentry *dentry);
0537
0538 static inline int ovl_verify_origin(struct ovl_fs *ofs, struct dentry *upper,
0539 struct dentry *origin, bool set)
0540 {
0541 return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, origin,
0542 false, set);
0543 }
0544
0545 static inline int ovl_verify_upper(struct ovl_fs *ofs, struct dentry *index,
0546 struct dentry *upper, bool set)
0547 {
0548 return ovl_verify_set_fh(ofs, index, OVL_XATTR_UPPER, upper, true, set);
0549 }
0550
0551
0552 extern const struct file_operations ovl_dir_operations;
0553 struct file *ovl_dir_real_file(const struct file *file, bool want_upper);
0554 int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list);
0555 void ovl_cleanup_whiteouts(struct ovl_fs *ofs, struct dentry *upper,
0556 struct list_head *list);
0557 void ovl_cache_free(struct list_head *list);
0558 void ovl_dir_cache_free(struct inode *inode);
0559 int ovl_check_d_type_supported(struct path *realpath);
0560 int ovl_workdir_cleanup(struct ovl_fs *ofs, struct inode *dir,
0561 struct vfsmount *mnt, struct dentry *dentry, int level);
0562 int ovl_indexdir_cleanup(struct ovl_fs *ofs);
0563
0564
0565
0566
0567
0568
0569
0570
0571 static inline bool ovl_dir_is_real(struct dentry *dir)
0572 {
0573 return !ovl_test_flag(OVL_WHITEOUTS, d_inode(dir));
0574 }
0575
0576
0577 int ovl_set_nlink_upper(struct dentry *dentry);
0578 int ovl_set_nlink_lower(struct dentry *dentry);
0579 unsigned int ovl_get_nlink(struct ovl_fs *ofs, struct dentry *lowerdentry,
0580 struct dentry *upperdentry,
0581 unsigned int fallback);
0582 int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
0583 struct iattr *attr);
0584 int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path,
0585 struct kstat *stat, u32 request_mask, unsigned int flags);
0586 int ovl_permission(struct user_namespace *mnt_userns, struct inode *inode,
0587 int mask);
0588 int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
0589 const void *value, size_t size, int flags);
0590 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
0591 void *value, size_t size);
0592 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size);
0593
0594 #ifdef CONFIG_FS_POSIX_ACL
0595 struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu);
0596 #else
0597 #define ovl_get_acl NULL
0598 #endif
0599
0600 int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
0601 bool ovl_is_private_xattr(struct super_block *sb, const char *name);
0602
0603 struct ovl_inode_params {
0604 struct inode *newinode;
0605 struct dentry *upperdentry;
0606 struct ovl_path *lowerpath;
0607 bool index;
0608 unsigned int numlower;
0609 char *redirect;
0610 struct dentry *lowerdata;
0611 };
0612 void ovl_inode_init(struct inode *inode, struct ovl_inode_params *oip,
0613 unsigned long ino, int fsid);
0614 struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, dev_t rdev);
0615 struct inode *ovl_lookup_inode(struct super_block *sb, struct dentry *real,
0616 bool is_upper);
0617 bool ovl_lookup_trap_inode(struct super_block *sb, struct dentry *dir);
0618 struct inode *ovl_get_trap_inode(struct super_block *sb, struct dentry *dir);
0619 struct inode *ovl_get_inode(struct super_block *sb,
0620 struct ovl_inode_params *oip);
0621 void ovl_copyattr(struct inode *to);
0622
0623
0624 #define OVL_COPY_I_FLAGS_MASK (S_SYNC | S_NOATIME | S_APPEND | S_IMMUTABLE)
0625
0626 #define OVL_PROT_I_FLAGS_MASK (S_APPEND | S_IMMUTABLE)
0627
0628
0629
0630
0631
0632
0633 #define OVL_COPY_FS_FLAGS_MASK (FS_SYNC_FL | FS_NOATIME_FL)
0634 #define OVL_COPY_FSX_FLAGS_MASK (FS_XFLAG_SYNC | FS_XFLAG_NOATIME)
0635 #define OVL_PROT_FS_FLAGS_MASK (FS_APPEND_FL | FS_IMMUTABLE_FL)
0636 #define OVL_PROT_FSX_FLAGS_MASK (FS_XFLAG_APPEND | FS_XFLAG_IMMUTABLE)
0637
0638 void ovl_check_protattr(struct inode *inode, struct dentry *upper);
0639 int ovl_set_protattr(struct inode *inode, struct dentry *upper,
0640 struct fileattr *fa);
0641
0642 static inline void ovl_copyflags(struct inode *from, struct inode *to)
0643 {
0644 unsigned int mask = OVL_COPY_I_FLAGS_MASK;
0645
0646 inode_set_flags(to, from->i_flags & mask, mask);
0647 }
0648
0649
0650 extern const struct inode_operations ovl_dir_inode_operations;
0651 int ovl_cleanup_and_whiteout(struct ovl_fs *ofs, struct inode *dir,
0652 struct dentry *dentry);
0653 struct ovl_cattr {
0654 dev_t rdev;
0655 umode_t mode;
0656 const char *link;
0657 struct dentry *hardlink;
0658 };
0659
0660 #define OVL_CATTR(m) (&(struct ovl_cattr) { .mode = (m) })
0661
0662 int ovl_mkdir_real(struct ovl_fs *ofs, struct inode *dir,
0663 struct dentry **newdentry, umode_t mode);
0664 struct dentry *ovl_create_real(struct ovl_fs *ofs,
0665 struct inode *dir, struct dentry *newdentry,
0666 struct ovl_cattr *attr);
0667 int ovl_cleanup(struct ovl_fs *ofs, struct inode *dir, struct dentry *dentry);
0668 struct dentry *ovl_lookup_temp(struct ovl_fs *ofs, struct dentry *workdir);
0669 struct dentry *ovl_create_temp(struct ovl_fs *ofs, struct dentry *workdir,
0670 struct ovl_cattr *attr);
0671
0672
0673 extern const struct file_operations ovl_file_operations;
0674 int __init ovl_aio_request_cache_init(void);
0675 void ovl_aio_request_cache_destroy(void);
0676 int ovl_real_fileattr_get(struct path *realpath, struct fileattr *fa);
0677 int ovl_real_fileattr_set(struct path *realpath, struct fileattr *fa);
0678 int ovl_fileattr_get(struct dentry *dentry, struct fileattr *fa);
0679 int ovl_fileattr_set(struct user_namespace *mnt_userns,
0680 struct dentry *dentry, struct fileattr *fa);
0681
0682
0683 int ovl_copy_up(struct dentry *dentry);
0684 int ovl_copy_up_with_data(struct dentry *dentry);
0685 int ovl_maybe_copy_up(struct dentry *dentry, int flags);
0686 int ovl_copy_xattr(struct super_block *sb, struct path *path, struct dentry *new);
0687 int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upper, struct kstat *stat);
0688 struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real,
0689 bool is_upper);
0690 int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower,
0691 struct dentry *upper);
0692
0693
0694 extern const struct export_operations ovl_export_operations;