1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * 4 * Copyright (C) 2011 Novell Inc. 5 */ 6 7 #include <linux/kernel.h> 8 #include <linux/uuid.h> 9 #include <linux/fs.h> 10 #include <linux/namei.h> 11 #include "ovl_entry.h" 12 13 #undef pr_fmt 14 #define pr_fmt(fmt) "overlayfs: " fmt 15 16 enum ovl_path_type { 17 __OVL_PATH_UPPER = (1 << 0), 18 __OVL_PATH_MERGE = (1 << 1), 19 __OVL_PATH_ORIGIN = (1 << 2), 20 }; 21 22 #define OVL_TYPE_UPPER(type) ((type) & __OVL_PATH_UPPER) 23 #define OVL_TYPE_MERGE(type) ((type) & __OVL_PATH_MERGE) 24 #define OVL_TYPE_ORIGIN(type) ((type) & __OVL_PATH_ORIGIN) 25 26 #define OVL_XATTR_NAMESPACE "overlay." 27 #define OVL_XATTR_TRUSTED_PREFIX XATTR_TRUSTED_PREFIX OVL_XATTR_NAMESPACE 28 #define OVL_XATTR_USER_PREFIX XATTR_USER_PREFIX OVL_XATTR_NAMESPACE 29 30 enum ovl_xattr { 31 OVL_XATTR_OPAQUE, 32 OVL_XATTR_REDIRECT, 33 OVL_XATTR_ORIGIN, 34 OVL_XATTR_IMPURE, 35 OVL_XATTR_NLINK, 36 OVL_XATTR_UPPER, 37 OVL_XATTR_METACOPY, 38 OVL_XATTR_PROTATTR, 39 }; 40 41 enum ovl_inode_flag { 42 /* Pure upper dir that may contain non pure upper entries */ 43 OVL_IMPURE, 44 /* Non-merge dir that may contain whiteout entries */ 45 OVL_WHITEOUTS, 46 OVL_INDEX, 47 OVL_UPPERDATA, 48 /* Inode number will remain constant over copy up. */ 49 OVL_CONST_INO, 50 }; 51 52 enum ovl_entry_flag { 53 OVL_E_UPPER_ALIAS, 54 OVL_E_OPAQUE, 55 OVL_E_CONNECTED, 56 }; 57 58 enum { 59 OVL_XINO_OFF, 60 OVL_XINO_AUTO, 61 OVL_XINO_ON, 62 }; 63 64 /* 65 * The tuple (fh,uuid) is a universal unique identifier for a copy up origin, 66 * where: 67 * origin.fh - exported file handle of the lower file 68 * origin.uuid - uuid of the lower filesystem 69 */ 70 #define OVL_FH_VERSION 0 71 #define OVL_FH_MAGIC 0xfb 72 73 /* CPU byte order required for fid decoding: */ 74 #define OVL_FH_FLAG_BIG_ENDIAN (1 << 0) 75 #define OVL_FH_FLAG_ANY_ENDIAN (1 << 1) 76 /* Is the real inode encoded in fid an upper inode? */ 77 #define OVL_FH_FLAG_PATH_UPPER (1 << 2) 78 79 #define OVL_FH_FLAG_ALL (OVL_FH_FLAG_BIG_ENDIAN | OVL_FH_FLAG_ANY_ENDIAN | \ 80 OVL_FH_FLAG_PATH_UPPER) 81 82 #if defined(__LITTLE_ENDIAN) 83 #define OVL_FH_FLAG_CPU_ENDIAN 0 84 #elif defined(__BIG_ENDIAN) 85 #define OVL_FH_FLAG_CPU_ENDIAN OVL_FH_FLAG_BIG_ENDIAN 86 #else 87 #error Endianness not defined 88 #endif 89 90 /* The type used to be returned by overlay exportfs for misaligned fid */ 91 #define OVL_FILEID_V0 0xfb 92 /* The type returned by overlay exportfs for 32bit aligned fid */ 93 #define OVL_FILEID_V1 0xf8 94 95 /* On-disk format for "origin" file handle */ 96 struct ovl_fb { 97 u8 version; /* 0 */ 98 u8 magic; /* 0xfb */ 99 u8 len; /* size of this header + size of fid */ 100 u8 flags; /* OVL_FH_FLAG_* */ 101 u8 type; /* fid_type of fid */ 102 uuid_t uuid; /* uuid of filesystem */ 103 u32 fid[]; /* file identifier should be 32bit aligned in-memory */ 104 } __packed; 105 106 /* In-memory and on-wire format for overlay file handle */ 107 struct ovl_fh { 108 u8 padding[3]; /* make sure fb.fid is 32bit aligned */ 109 union { 110 struct ovl_fb fb; 111 u8 buf[0]; 112 }; 113 } __packed; 114 115 #define OVL_FH_WIRE_OFFSET offsetof(struct ovl_fh, fb) 116 #define OVL_FH_LEN(fh) (OVL_FH_WIRE_OFFSET + (fh)->fb.len) 117 #define OVL_FH_FID_OFFSET (OVL_FH_WIRE_OFFSET + \ 118 offsetof(struct ovl_fb, fid)) 119 120 extern const char *const ovl_xattr_table[][2]; 121 static inline const char *ovl_xattr(struct ovl_fs *ofs, enum ovl_xattr ox) 122 { 123 return ovl_xattr_table[ox][ofs->config.userxattr]; 124 } 125 126 /* 127 * When changing ownership of an upper object map the intended ownership 128 * according to the upper layer's idmapping. When an upper mount idmaps files 129 * that are stored on-disk as owned by id 1001 to id 1000 this means stat on 130 * this object will report it as being owned by id 1000 when calling stat via 131 * the upper mount. 132 * In order to change ownership of an object so stat reports id 1000 when 133 * called on an idmapped upper mount the value written to disk - i.e., the 134 * value stored in ia_*id - must 1001. The mount mapping helper will thus take 135 * care to map 1000 to 1001. 136 * The mnt idmapping helpers are nops if the upper layer isn't idmapped. 137 */ 138 static inline int ovl_do_notify_change(struct ovl_fs *ofs, 139 struct dentry *upperdentry, 140 struct iattr *attr) 141 { 142 return notify_change(ovl_upper_mnt_userns(ofs), upperdentry, attr, NULL); 143 } 144 145 static inline int ovl_do_rmdir(struct ovl_fs *ofs, 146 struct inode *dir, struct dentry *dentry) 147 { 148 int err = vfs_rmdir(ovl_upper_mnt_userns(ofs), dir, dentry); 149 150 pr_debug("rmdir(%pd2) = %i\n", dentry, err); 151 return err; 152 } 153 154 static inline int ovl_do_unlink(struct ovl_fs *ofs, struct inode *dir, 155 struct dentry *dentry) 156 { 157 int err = vfs_unlink(ovl_upper_mnt_userns(ofs), dir, dentry, NULL); 158 159 pr_debug("unlink(%pd2) = %i\n", dentry, err); 160 return err; 161 } 162 163 static inline int ovl_do_link(struct ovl_fs *ofs, struct dentry *old_dentry, 164 struct inode *dir, struct dentry *new_dentry) 165 { 166 int err = vfs_link(old_dentry, ovl_upper_mnt_userns(ofs), dir, new_dentry, NULL); 167 168 pr_debug("link(%pd2, %pd2) = %i\n", old_dentry, new_dentry, err); 169 return err; 170 } 171 172 static inline int ovl_do_create(struct ovl_fs *ofs, 173 struct inode *dir, struct dentry *dentry, 174 umode_t mode) 175 { 176 int err = vfs_create(ovl_upper_mnt_userns(ofs), dir, dentry, mode, true); 177 178 pr_debug("create(%pd2, 0%o) = %i\n", dentry, mode, err); 179 return err; 180 } 181 182 static inline int ovl_do_mkdir(struct ovl_fs *ofs, 183 struct inode *dir, struct dentry *dentry, 184 umode_t mode) 185 { 186 int err = vfs_mkdir(ovl_upper_mnt_userns(ofs), dir, dentry, mode); 187 pr_debug("mkdir(%pd2, 0%o) = %i\n", dentry, mode, err); 188 return err; 189 } 190 191 static inline int ovl_do_mknod(struct ovl_fs *ofs, 192 struct inode *dir, struct dentry *dentry, 193 umode_t mode, dev_t dev) 194 { 195 int err = vfs_mknod(ovl_upper_mnt_userns(ofs), dir, dentry, mode, dev); 196 197 pr_debug("mknod(%pd2, 0%o, 0%o) = %i\n", dentry, mode, dev, err); 198 return err; 199 } 200 201 static inline int ovl_do_symlink(struct ovl_fs *ofs, 202 struct inode *dir, struct dentry *dentry, 203 const char *oldname) 204 { 205 int err = vfs_symlink(ovl_upper_mnt_userns(ofs), dir, dentry, oldname); 206 207 pr_debug("symlink(\"%s\", %pd2) = %i\n", oldname, dentry, err); 208 return err; 209 } 210 211 static inline ssize_t ovl_do_getxattr(struct path *path, const char *name, 212 void *value, size_t size) 213 { 214 int err, len; 215 216 WARN_ON(path->dentry->d_sb != path->mnt->mnt_sb); 217 218 err = vfs_getxattr(mnt_user_ns(path->mnt), path->dentry, 219 name, value, size); 220 len = (value && err > 0) ? err : 0; 221 222 pr_debug("getxattr(%pd2, \"%s\", \"%*pE\", %zu, 0) = %i\n", 223 path->dentry, name, min(len, 48), value, size, err); 224 return err; 225 } 226 227 static inline ssize_t ovl_getxattr_upper(struct ovl_fs *ofs, 228 struct dentry *upperdentry, 229 enum ovl_xattr ox, void *value, 230 size_t size) 231 { 232 struct path upperpath = { 233 .dentry = upperdentry, 234 .mnt = ovl_upper_mnt(ofs), 235 }; 236 237 return ovl_do_getxattr(&upperpath, ovl_xattr(ofs, ox), value, size); 238 } 239 240 static inline ssize_t ovl_path_getxattr(struct ovl_fs *ofs, 241 struct path *path, 242 enum ovl_xattr ox, void *value, 243 size_t size) 244 { 245 return ovl_do_getxattr(path, ovl_xattr(ofs, ox), value, size); 246 } 247 248 static inline int ovl_do_setxattr(struct ovl_fs *ofs, struct dentry *dentry, 249 const char *name, const void *value, 250 size_t size, int flags) 251 { 252 int err = vfs_setxattr(ovl_upper_mnt_userns(ofs), dentry, name, 253 (void *)value, size, flags); 254 255 pr_debug("setxattr(%pd2, \"%s\", \"%*pE\", %zu, %d) = %i\n", 256 dentry, name, min((int)size, 48), value, size, flags, err); 257 return err; 258 } 259 260 static inline int ovl_setxattr(struct ovl_fs *ofs, struct dentry *dentry, 261 enum ovl_xattr ox, const void *value, 262 size_t size) 263 { 264 return ovl_do_setxattr(ofs, dentry, ovl_xattr(ofs, ox), value, size, 0); 265 } 266 267 static inline int ovl_do_removexattr(struct ovl_fs *ofs, struct dentry *dentry, 268 const char *name) 269 { 270 int err = vfs_removexattr(ovl_upper_mnt_userns(ofs), dentry, name); 271 pr_debug("removexattr(%pd2, \"%s\") = %i\n", dentry, name, err); 272 return err; 273 } 274 275 static inline int ovl_removexattr(struct ovl_fs *ofs, struct dentry *dentry, 276 enum ovl_xattr ox) 277 { 278 return ovl_do_removexattr(ofs, dentry, ovl_xattr(ofs, ox)); 279 } 280 281 static inline int ovl_do_rename(struct ovl_fs *ofs, struct inode *olddir, 282 struct dentry *olddentry, struct inode *newdir, 283 struct dentry *newdentry, unsigned int flags) 284 { 285 int err; 286 struct renamedata rd = { 287 .old_mnt_userns = ovl_upper_mnt_userns(ofs), 288 .old_dir = olddir, 289 .old_dentry = olddentry, 290 .new_mnt_userns = ovl_upper_mnt_userns(ofs), 291 .new_dir = newdir, 292 .new_dentry = newdentry, 293 .flags = flags, 294 }; 295 296 pr_debug("rename(%pd2, %pd2, 0x%x)\n", olddentry, newdentry, flags); 297 err = vfs_rename(&rd); 298 if (err) { 299 pr_debug("...rename(%pd2, %pd2, ...) = %i\n", 300 olddentry, newdentry, err); 301 } 302 return err; 303 } 304 305 static inline int ovl_do_whiteout(struct ovl_fs *ofs, 306 struct inode *dir, struct dentry *dentry) 307 { 308 int err = vfs_whiteout(ovl_upper_mnt_userns(ofs), dir, dentry); 309 pr_debug("whiteout(%pd2) = %i\n", dentry, err); 310 return err; 311 } 312 313 static inline struct dentry *ovl_do_tmpfile(struct ovl_fs *ofs, 314 struct dentry *dentry, umode_t mode) 315 { 316 struct dentry *ret = vfs_tmpfile(ovl_upper_mnt_userns(ofs), dentry, mode, 0); 317 int err = PTR_ERR_OR_ZERO(ret); 318 319 pr_debug("tmpfile(%pd2, 0%o) = %i\n", dentry, mode, err); 320 return ret; 321 } 322 323 static inline struct dentry *ovl_lookup_upper(struct ovl_fs *ofs, 324 const char *name, 325 struct dentry *base, int len) 326 { 327 return lookup_one(ovl_upper_mnt_userns(ofs), name, base, len); 328 } 329 330 static inline bool ovl_open_flags_need_copy_up(int flags) 331 { 332 if (!flags) 333 return false; 334 335 return ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC)); 336 } 337 338 static inline bool ovl_allow_offline_changes(struct ovl_fs *ofs) 339 { 340 /* 341 * To avoid regressions in existing setups with overlay lower offline 342 * changes, we allow lower changes only if none of the new features 343 * are used. 344 */ 345 return (!ofs->config.index && !ofs->config.metacopy && 346 !ofs->config.redirect_dir && ofs->config.xino != OVL_XINO_ON); 347 } 348 349 350 /* util.c */ 351 int ovl_want_write(struct dentry *dentry); 352 void ovl_drop_write(struct dentry *dentry); 353 struct dentry *ovl_workdir(struct dentry *dentry); 354 const struct cred *ovl_override_creds(struct super_block *sb); 355 int ovl_can_decode_fh(struct super_block *sb); 356 struct dentry *ovl_indexdir(struct super_block *sb); 357 bool ovl_index_all(struct super_block *sb); 358 bool ovl_verify_lower(struct super_block *sb); 359 struct ovl_entry *ovl_alloc_entry(unsigned int numlower); 360 bool ovl_dentry_remote(struct dentry *dentry); 361 void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry, 362 unsigned int mask); 363 bool ovl_dentry_weird(struct dentry *dentry); 364 enum ovl_path_type ovl_path_type(struct dentry *dentry); 365 void ovl_path_upper(struct dentry *dentry, struct path *path); 366 void ovl_path_lower(struct dentry *dentry, struct path *path); 367 void ovl_path_lowerdata(struct dentry *dentry, struct path *path); 368 void ovl_i_path_real(struct inode *inode, struct path *path); 369 enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path); 370 enum ovl_path_type ovl_path_realdata(struct dentry *dentry, struct path *path); 371 struct dentry *ovl_dentry_upper(struct dentry *dentry); 372 struct dentry *ovl_dentry_lower(struct dentry *dentry); 373 struct dentry *ovl_dentry_lowerdata(struct dentry *dentry); 374 const struct ovl_layer *ovl_i_layer_lower(struct inode *inode); 375 const struct ovl_layer *ovl_layer_lower(struct dentry *dentry); 376 struct dentry *ovl_dentry_real(struct dentry *dentry); 377 struct dentry *ovl_i_dentry_upper(struct inode *inode); 378 struct inode *ovl_inode_upper(struct inode *inode); 379 struct inode *ovl_inode_lower(struct inode *inode); 380 struct inode *ovl_inode_lowerdata(struct inode *inode); 381 struct inode *ovl_inode_real(struct inode *inode); 382 struct inode *ovl_inode_realdata(struct inode *inode); 383 struct ovl_dir_cache *ovl_dir_cache(struct inode *inode); 384 void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache); 385 void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry); 386 void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry); 387 bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry); 388 bool ovl_dentry_is_opaque(struct dentry *dentry); 389 bool ovl_dentry_is_whiteout(struct dentry *dentry); 390 void ovl_dentry_set_opaque(struct dentry *dentry); 391 bool ovl_dentry_has_upper_alias(struct dentry *dentry); 392 void ovl_dentry_set_upper_alias(struct dentry *dentry); 393 bool ovl_dentry_needs_data_copy_up(struct dentry *dentry, int flags); 394 bool ovl_dentry_needs_data_copy_up_locked(struct dentry *dentry, int flags); 395 bool ovl_has_upperdata(struct inode *inode); 396 void ovl_set_upperdata(struct inode *inode); 397 bool ovl_redirect_dir(struct super_block *sb); 398 const char *ovl_dentry_get_redirect(struct dentry *dentry); 399 void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect); 400 void ovl_inode_update(struct inode *inode, struct dentry *upperdentry); 401 void ovl_dir_modified(struct dentry *dentry, bool impurity); 402 u64 ovl_dentry_version_get(struct dentry *dentry); 403 bool ovl_is_whiteout(struct dentry *dentry); 404 struct file *ovl_path_open(struct path *path, int flags); 405 int ovl_copy_up_start(struct dentry *dentry, int flags); 406 void ovl_copy_up_end(struct dentry *dentry); 407 bool ovl_already_copied_up(struct dentry *dentry, int flags); 408 bool ovl_path_check_dir_xattr(struct ovl_fs *ofs, struct path *path, 409 enum ovl_xattr ox); 410 bool ovl_path_check_origin_xattr(struct ovl_fs *ofs, struct path *path); 411 412 static inline bool ovl_check_origin_xattr(struct ovl_fs *ofs, 413 struct dentry *upperdentry) 414 { 415 struct path upperpath = { 416 .dentry = upperdentry, 417 .mnt = ovl_upper_mnt(ofs), 418 }; 419 return ovl_path_check_origin_xattr(ofs, &upperpath); 420 } 421 422 int ovl_check_setxattr(struct ovl_fs *ofs, struct dentry *upperdentry, 423 enum ovl_xattr ox, const void *value, size_t size, 424 int xerr); 425 int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry); 426 bool ovl_inuse_trylock(struct dentry *dentry); 427 void ovl_inuse_unlock(struct dentry *dentry); 428 bool ovl_is_inuse(struct dentry *dentry); 429 bool ovl_need_index(struct dentry *dentry); 430 int ovl_nlink_start(struct dentry *dentry); 431 void ovl_nlink_end(struct dentry *dentry); 432 int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir); 433 int ovl_check_metacopy_xattr(struct ovl_fs *ofs, struct path *path); 434 bool ovl_is_metacopy_dentry(struct dentry *dentry); 435 char *ovl_get_redirect_xattr(struct ovl_fs *ofs, struct path *path, int padding); 436 int ovl_sync_status(struct ovl_fs *ofs); 437 438 static inline void ovl_set_flag(unsigned long flag, struct inode *inode) 439 { 440 set_bit(flag, &OVL_I(inode)->flags); 441 } 442 443 static inline void ovl_clear_flag(unsigned long flag, struct inode *inode) 444 { 445 clear_bit(flag, &OVL_I(inode)->flags); 446 } 447 448 static inline bool ovl_test_flag(unsigned long flag, struct inode *inode) 449 { 450 return test_bit(flag, &OVL_I(inode)->flags); 451 } 452 453 static inline bool ovl_is_impuredir(struct super_block *sb, 454 struct dentry *upperdentry) 455 { 456 struct ovl_fs *ofs = OVL_FS(sb); 457 struct path upperpath = { 458 .dentry = upperdentry, 459 .mnt = ovl_upper_mnt(ofs), 460 }; 461 462 return ovl_path_check_dir_xattr(ofs, &upperpath, OVL_XATTR_IMPURE); 463 } 464 465 /* 466 * With xino=auto, we do best effort to keep all inodes on same st_dev and 467 * d_ino consistent with st_ino. 468 * With xino=on, we do the same effort but we warn if we failed. 469 */ 470 static inline bool ovl_xino_warn(struct super_block *sb) 471 { 472 return OVL_FS(sb)->config.xino == OVL_XINO_ON; 473 } 474 475 /* All layers on same fs? */ 476 static inline bool ovl_same_fs(struct super_block *sb) 477 { 478 return OVL_FS(sb)->xino_mode == 0; 479 } 480 481 /* All overlay inodes have same st_dev? */ 482 static inline bool ovl_same_dev(struct super_block *sb) 483 { 484 return OVL_FS(sb)->xino_mode >= 0; 485 } 486 487 static inline unsigned int ovl_xino_bits(struct super_block *sb) 488 { 489 return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0; 490 } 491 492 static inline void ovl_inode_lock(struct inode *inode) 493 { 494 mutex_lock(&OVL_I(inode)->lock); 495 } 496 497 static inline int ovl_inode_lock_interruptible(struct inode *inode) 498 { 499 return mutex_lock_interruptible(&OVL_I(inode)->lock); 500 } 501 502 static inline void ovl_inode_unlock(struct inode *inode) 503 { 504 mutex_unlock(&OVL_I(inode)->lock); 505 } 506 507 508 /* namei.c */ 509 int ovl_check_fb_len(struct ovl_fb *fb, int fb_len); 510 511 static inline int ovl_check_fh_len(struct ovl_fh *fh, int fh_len) 512 { 513 if (fh_len < sizeof(struct ovl_fh)) 514 return -EINVAL; 515 516 return ovl_check_fb_len(&fh->fb, fh_len - OVL_FH_WIRE_OFFSET); 517 } 518 519 struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh, 520 struct vfsmount *mnt, bool connected); 521 int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected, 522 struct dentry *upperdentry, struct ovl_path **stackp); 523 int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry, 524 enum ovl_xattr ox, struct dentry *real, bool is_upper, 525 bool set); 526 struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index); 527 int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index); 528 int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin, 529 struct qstr *name); 530 struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh); 531 struct dentry *ovl_lookup_index(struct ovl_fs *ofs, struct dentry *upper, 532 struct dentry *origin, bool verify); 533 int ovl_path_next(int idx, struct dentry *dentry, struct path *path); 534 struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, 535 unsigned int flags); 536 bool ovl_lower_positive(struct dentry *dentry); 537 538 static inline int ovl_verify_origin(struct ovl_fs *ofs, struct dentry *upper, 539 struct dentry *origin, bool set) 540 { 541 return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, origin, 542 false, set); 543 } 544 545 static inline int ovl_verify_upper(struct ovl_fs *ofs, struct dentry *index, 546 struct dentry *upper, bool set) 547 { 548 return ovl_verify_set_fh(ofs, index, OVL_XATTR_UPPER, upper, true, set); 549 } 550 551 /* readdir.c */ 552 extern const struct file_operations ovl_dir_operations; 553 struct file *ovl_dir_real_file(const struct file *file, bool want_upper); 554 int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list); 555 void ovl_cleanup_whiteouts(struct ovl_fs *ofs, struct dentry *upper, 556 struct list_head *list); 557 void ovl_cache_free(struct list_head *list); 558 void ovl_dir_cache_free(struct inode *inode); 559 int ovl_check_d_type_supported(struct path *realpath); 560 int ovl_workdir_cleanup(struct ovl_fs *ofs, struct inode *dir, 561 struct vfsmount *mnt, struct dentry *dentry, int level); 562 int ovl_indexdir_cleanup(struct ovl_fs *ofs); 563 564 /* 565 * Can we iterate real dir directly? 566 * 567 * Non-merge dir may contain whiteouts from a time it was a merge upper, before 568 * lower dir was removed under it and possibly before it was rotated from upper 569 * to lower layer. 570 */ 571 static inline bool ovl_dir_is_real(struct dentry *dir) 572 { 573 return !ovl_test_flag(OVL_WHITEOUTS, d_inode(dir)); 574 } 575 576 /* inode.c */ 577 int ovl_set_nlink_upper(struct dentry *dentry); 578 int ovl_set_nlink_lower(struct dentry *dentry); 579 unsigned int ovl_get_nlink(struct ovl_fs *ofs, struct dentry *lowerdentry, 580 struct dentry *upperdentry, 581 unsigned int fallback); 582 int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 583 struct iattr *attr); 584 int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path, 585 struct kstat *stat, u32 request_mask, unsigned int flags); 586 int ovl_permission(struct user_namespace *mnt_userns, struct inode *inode, 587 int mask); 588 int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, 589 const void *value, size_t size, int flags); 590 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name, 591 void *value, size_t size); 592 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); 593 594 #ifdef CONFIG_FS_POSIX_ACL 595 struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu); 596 #else 597 #define ovl_get_acl NULL 598 #endif 599 600 int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags); 601 bool ovl_is_private_xattr(struct super_block *sb, const char *name); 602 603 struct ovl_inode_params { 604 struct inode *newinode; 605 struct dentry *upperdentry; 606 struct ovl_path *lowerpath; 607 bool index; 608 unsigned int numlower; 609 char *redirect; 610 struct dentry *lowerdata; 611 }; 612 void ovl_inode_init(struct inode *inode, struct ovl_inode_params *oip, 613 unsigned long ino, int fsid); 614 struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, dev_t rdev); 615 struct inode *ovl_lookup_inode(struct super_block *sb, struct dentry *real, 616 bool is_upper); 617 bool ovl_lookup_trap_inode(struct super_block *sb, struct dentry *dir); 618 struct inode *ovl_get_trap_inode(struct super_block *sb, struct dentry *dir); 619 struct inode *ovl_get_inode(struct super_block *sb, 620 struct ovl_inode_params *oip); 621 void ovl_copyattr(struct inode *to); 622 623 /* vfs inode flags copied from real to ovl inode */ 624 #define OVL_COPY_I_FLAGS_MASK (S_SYNC | S_NOATIME | S_APPEND | S_IMMUTABLE) 625 /* vfs inode flags read from overlay.protattr xattr to ovl inode */ 626 #define OVL_PROT_I_FLAGS_MASK (S_APPEND | S_IMMUTABLE) 627 628 /* 629 * fileattr flags copied from lower to upper inode on copy up. 630 * We cannot copy up immutable/append-only flags, because that would prevent 631 * linking temp inode to upper dir, so we store them in xattr instead. 632 */ 633 #define OVL_COPY_FS_FLAGS_MASK (FS_SYNC_FL | FS_NOATIME_FL) 634 #define OVL_COPY_FSX_FLAGS_MASK (FS_XFLAG_SYNC | FS_XFLAG_NOATIME) 635 #define OVL_PROT_FS_FLAGS_MASK (FS_APPEND_FL | FS_IMMUTABLE_FL) 636 #define OVL_PROT_FSX_FLAGS_MASK (FS_XFLAG_APPEND | FS_XFLAG_IMMUTABLE) 637 638 void ovl_check_protattr(struct inode *inode, struct dentry *upper); 639 int ovl_set_protattr(struct inode *inode, struct dentry *upper, 640 struct fileattr *fa); 641 642 static inline void ovl_copyflags(struct inode *from, struct inode *to) 643 { 644 unsigned int mask = OVL_COPY_I_FLAGS_MASK; 645 646 inode_set_flags(to, from->i_flags & mask, mask); 647 } 648 649 /* dir.c */ 650 extern const struct inode_operations ovl_dir_inode_operations; 651 int ovl_cleanup_and_whiteout(struct ovl_fs *ofs, struct inode *dir, 652 struct dentry *dentry); 653 struct ovl_cattr { 654 dev_t rdev; 655 umode_t mode; 656 const char *link; 657 struct dentry *hardlink; 658 }; 659 660 #define OVL_CATTR(m) (&(struct ovl_cattr) { .mode = (m) }) 661 662 int ovl_mkdir_real(struct ovl_fs *ofs, struct inode *dir, 663 struct dentry **newdentry, umode_t mode); 664 struct dentry *ovl_create_real(struct ovl_fs *ofs, 665 struct inode *dir, struct dentry *newdentry, 666 struct ovl_cattr *attr); 667 int ovl_cleanup(struct ovl_fs *ofs, struct inode *dir, struct dentry *dentry); 668 struct dentry *ovl_lookup_temp(struct ovl_fs *ofs, struct dentry *workdir); 669 struct dentry *ovl_create_temp(struct ovl_fs *ofs, struct dentry *workdir, 670 struct ovl_cattr *attr); 671 672 /* file.c */ 673 extern const struct file_operations ovl_file_operations; 674 int __init ovl_aio_request_cache_init(void); 675 void ovl_aio_request_cache_destroy(void); 676 int ovl_real_fileattr_get(struct path *realpath, struct fileattr *fa); 677 int ovl_real_fileattr_set(struct path *realpath, struct fileattr *fa); 678 int ovl_fileattr_get(struct dentry *dentry, struct fileattr *fa); 679 int ovl_fileattr_set(struct user_namespace *mnt_userns, 680 struct dentry *dentry, struct fileattr *fa); 681 682 /* copy_up.c */ 683 int ovl_copy_up(struct dentry *dentry); 684 int ovl_copy_up_with_data(struct dentry *dentry); 685 int ovl_maybe_copy_up(struct dentry *dentry, int flags); 686 int ovl_copy_xattr(struct super_block *sb, struct path *path, struct dentry *new); 687 int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upper, struct kstat *stat); 688 struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real, 689 bool is_upper); 690 int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower, 691 struct dentry *upper); 692 693 /* export.c */ 694 extern const struct export_operations ovl_export_operations; 695