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(const 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 const 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 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 file *ovl_do_tmpfile(struct ovl_fs *ofs, 314 struct dentry *dentry, umode_t mode) 315 { 316 struct path path = { .mnt = ovl_upper_mnt(ofs), .dentry = dentry }; 317 struct file *file = vfs_tmpfile_open(ovl_upper_mnt_userns(ofs), &path, mode, 318 O_LARGEFILE | O_WRONLY, current_cred()); 319 int err = PTR_ERR_OR_ZERO(file); 320 321 pr_debug("tmpfile(%pd2, 0%o) = %i\n", dentry, mode, err); 322 return file; 323 } 324 325 static inline struct dentry *ovl_lookup_upper(struct ovl_fs *ofs, 326 const char *name, 327 struct dentry *base, int len) 328 { 329 return lookup_one(ovl_upper_mnt_userns(ofs), name, base, len); 330 } 331 332 static inline bool ovl_open_flags_need_copy_up(int flags) 333 { 334 if (!flags) 335 return false; 336 337 return ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC)); 338 } 339 340 static inline bool ovl_allow_offline_changes(struct ovl_fs *ofs) 341 { 342 /* 343 * To avoid regressions in existing setups with overlay lower offline 344 * changes, we allow lower changes only if none of the new features 345 * are used. 346 */ 347 return (!ofs->config.index && !ofs->config.metacopy && 348 !ofs->config.redirect_dir && ofs->config.xino != OVL_XINO_ON); 349 } 350 351 352 /* util.c */ 353 int ovl_want_write(struct dentry *dentry); 354 void ovl_drop_write(struct dentry *dentry); 355 struct dentry *ovl_workdir(struct dentry *dentry); 356 const struct cred *ovl_override_creds(struct super_block *sb); 357 int ovl_can_decode_fh(struct super_block *sb); 358 struct dentry *ovl_indexdir(struct super_block *sb); 359 bool ovl_index_all(struct super_block *sb); 360 bool ovl_verify_lower(struct super_block *sb); 361 struct ovl_entry *ovl_alloc_entry(unsigned int numlower); 362 bool ovl_dentry_remote(struct dentry *dentry); 363 void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry, 364 unsigned int mask); 365 bool ovl_dentry_weird(struct dentry *dentry); 366 enum ovl_path_type ovl_path_type(struct dentry *dentry); 367 void ovl_path_upper(struct dentry *dentry, struct path *path); 368 void ovl_path_lower(struct dentry *dentry, struct path *path); 369 void ovl_path_lowerdata(struct dentry *dentry, struct path *path); 370 void ovl_i_path_real(struct inode *inode, struct path *path); 371 enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path); 372 enum ovl_path_type ovl_path_realdata(struct dentry *dentry, struct path *path); 373 struct dentry *ovl_dentry_upper(struct dentry *dentry); 374 struct dentry *ovl_dentry_lower(struct dentry *dentry); 375 struct dentry *ovl_dentry_lowerdata(struct dentry *dentry); 376 const struct ovl_layer *ovl_i_layer_lower(struct inode *inode); 377 const struct ovl_layer *ovl_layer_lower(struct dentry *dentry); 378 struct dentry *ovl_dentry_real(struct dentry *dentry); 379 struct dentry *ovl_i_dentry_upper(struct inode *inode); 380 struct inode *ovl_inode_upper(struct inode *inode); 381 struct inode *ovl_inode_lower(struct inode *inode); 382 struct inode *ovl_inode_lowerdata(struct inode *inode); 383 struct inode *ovl_inode_real(struct inode *inode); 384 struct inode *ovl_inode_realdata(struct inode *inode); 385 struct ovl_dir_cache *ovl_dir_cache(struct inode *inode); 386 void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache); 387 void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry); 388 void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry); 389 bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry); 390 bool ovl_dentry_is_opaque(struct dentry *dentry); 391 bool ovl_dentry_is_whiteout(struct dentry *dentry); 392 void ovl_dentry_set_opaque(struct dentry *dentry); 393 bool ovl_dentry_has_upper_alias(struct dentry *dentry); 394 void ovl_dentry_set_upper_alias(struct dentry *dentry); 395 bool ovl_dentry_needs_data_copy_up(struct dentry *dentry, int flags); 396 bool ovl_dentry_needs_data_copy_up_locked(struct dentry *dentry, int flags); 397 bool ovl_has_upperdata(struct inode *inode); 398 void ovl_set_upperdata(struct inode *inode); 399 bool ovl_redirect_dir(struct super_block *sb); 400 const char *ovl_dentry_get_redirect(struct dentry *dentry); 401 void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect); 402 void ovl_inode_update(struct inode *inode, struct dentry *upperdentry); 403 void ovl_dir_modified(struct dentry *dentry, bool impurity); 404 u64 ovl_dentry_version_get(struct dentry *dentry); 405 bool ovl_is_whiteout(struct dentry *dentry); 406 struct file *ovl_path_open(const struct path *path, int flags); 407 int ovl_copy_up_start(struct dentry *dentry, int flags); 408 void ovl_copy_up_end(struct dentry *dentry); 409 bool ovl_already_copied_up(struct dentry *dentry, int flags); 410 bool ovl_path_check_dir_xattr(struct ovl_fs *ofs, const struct path *path, 411 enum ovl_xattr ox); 412 bool ovl_path_check_origin_xattr(struct ovl_fs *ofs, const struct path *path); 413 414 static inline bool ovl_check_origin_xattr(struct ovl_fs *ofs, 415 struct dentry *upperdentry) 416 { 417 struct path upperpath = { 418 .dentry = upperdentry, 419 .mnt = ovl_upper_mnt(ofs), 420 }; 421 return ovl_path_check_origin_xattr(ofs, &upperpath); 422 } 423 424 int ovl_check_setxattr(struct ovl_fs *ofs, struct dentry *upperdentry, 425 enum ovl_xattr ox, const void *value, size_t size, 426 int xerr); 427 int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry); 428 bool ovl_inuse_trylock(struct dentry *dentry); 429 void ovl_inuse_unlock(struct dentry *dentry); 430 bool ovl_is_inuse(struct dentry *dentry); 431 bool ovl_need_index(struct dentry *dentry); 432 int ovl_nlink_start(struct dentry *dentry); 433 void ovl_nlink_end(struct dentry *dentry); 434 int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir); 435 int ovl_check_metacopy_xattr(struct ovl_fs *ofs, const struct path *path); 436 bool ovl_is_metacopy_dentry(struct dentry *dentry); 437 char *ovl_get_redirect_xattr(struct ovl_fs *ofs, const struct path *path, int padding); 438 int ovl_sync_status(struct ovl_fs *ofs); 439 440 static inline void ovl_set_flag(unsigned long flag, struct inode *inode) 441 { 442 set_bit(flag, &OVL_I(inode)->flags); 443 } 444 445 static inline void ovl_clear_flag(unsigned long flag, struct inode *inode) 446 { 447 clear_bit(flag, &OVL_I(inode)->flags); 448 } 449 450 static inline bool ovl_test_flag(unsigned long flag, struct inode *inode) 451 { 452 return test_bit(flag, &OVL_I(inode)->flags); 453 } 454 455 static inline bool ovl_is_impuredir(struct super_block *sb, 456 struct dentry *upperdentry) 457 { 458 struct ovl_fs *ofs = OVL_FS(sb); 459 struct path upperpath = { 460 .dentry = upperdentry, 461 .mnt = ovl_upper_mnt(ofs), 462 }; 463 464 return ovl_path_check_dir_xattr(ofs, &upperpath, OVL_XATTR_IMPURE); 465 } 466 467 /* 468 * With xino=auto, we do best effort to keep all inodes on same st_dev and 469 * d_ino consistent with st_ino. 470 * With xino=on, we do the same effort but we warn if we failed. 471 */ 472 static inline bool ovl_xino_warn(struct super_block *sb) 473 { 474 return OVL_FS(sb)->config.xino == OVL_XINO_ON; 475 } 476 477 /* All layers on same fs? */ 478 static inline bool ovl_same_fs(struct super_block *sb) 479 { 480 return OVL_FS(sb)->xino_mode == 0; 481 } 482 483 /* All overlay inodes have same st_dev? */ 484 static inline bool ovl_same_dev(struct super_block *sb) 485 { 486 return OVL_FS(sb)->xino_mode >= 0; 487 } 488 489 static inline unsigned int ovl_xino_bits(struct super_block *sb) 490 { 491 return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0; 492 } 493 494 static inline void ovl_inode_lock(struct inode *inode) 495 { 496 mutex_lock(&OVL_I(inode)->lock); 497 } 498 499 static inline int ovl_inode_lock_interruptible(struct inode *inode) 500 { 501 return mutex_lock_interruptible(&OVL_I(inode)->lock); 502 } 503 504 static inline void ovl_inode_unlock(struct inode *inode) 505 { 506 mutex_unlock(&OVL_I(inode)->lock); 507 } 508 509 510 /* namei.c */ 511 int ovl_check_fb_len(struct ovl_fb *fb, int fb_len); 512 513 static inline int ovl_check_fh_len(struct ovl_fh *fh, int fh_len) 514 { 515 if (fh_len < sizeof(struct ovl_fh)) 516 return -EINVAL; 517 518 return ovl_check_fb_len(&fh->fb, fh_len - OVL_FH_WIRE_OFFSET); 519 } 520 521 struct dentry *ovl_decode_real_fh(struct ovl_fs *ofs, struct ovl_fh *fh, 522 struct vfsmount *mnt, bool connected); 523 int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected, 524 struct dentry *upperdentry, struct ovl_path **stackp); 525 int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry, 526 enum ovl_xattr ox, struct dentry *real, bool is_upper, 527 bool set); 528 struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index); 529 int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index); 530 int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin, 531 struct qstr *name); 532 struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh); 533 struct dentry *ovl_lookup_index(struct ovl_fs *ofs, struct dentry *upper, 534 struct dentry *origin, bool verify); 535 int ovl_path_next(int idx, struct dentry *dentry, struct path *path); 536 struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, 537 unsigned int flags); 538 bool ovl_lower_positive(struct dentry *dentry); 539 540 static inline int ovl_verify_origin(struct ovl_fs *ofs, struct dentry *upper, 541 struct dentry *origin, bool set) 542 { 543 return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, origin, 544 false, set); 545 } 546 547 static inline int ovl_verify_upper(struct ovl_fs *ofs, struct dentry *index, 548 struct dentry *upper, bool set) 549 { 550 return ovl_verify_set_fh(ofs, index, OVL_XATTR_UPPER, upper, true, set); 551 } 552 553 /* readdir.c */ 554 extern const struct file_operations ovl_dir_operations; 555 struct file *ovl_dir_real_file(const struct file *file, bool want_upper); 556 int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list); 557 void ovl_cleanup_whiteouts(struct ovl_fs *ofs, struct dentry *upper, 558 struct list_head *list); 559 void ovl_cache_free(struct list_head *list); 560 void ovl_dir_cache_free(struct inode *inode); 561 int ovl_check_d_type_supported(const struct path *realpath); 562 int ovl_workdir_cleanup(struct ovl_fs *ofs, struct inode *dir, 563 struct vfsmount *mnt, struct dentry *dentry, int level); 564 int ovl_indexdir_cleanup(struct ovl_fs *ofs); 565 566 /* 567 * Can we iterate real dir directly? 568 * 569 * Non-merge dir may contain whiteouts from a time it was a merge upper, before 570 * lower dir was removed under it and possibly before it was rotated from upper 571 * to lower layer. 572 */ 573 static inline bool ovl_dir_is_real(struct dentry *dir) 574 { 575 return !ovl_test_flag(OVL_WHITEOUTS, d_inode(dir)); 576 } 577 578 /* inode.c */ 579 int ovl_set_nlink_upper(struct dentry *dentry); 580 int ovl_set_nlink_lower(struct dentry *dentry); 581 unsigned int ovl_get_nlink(struct ovl_fs *ofs, struct dentry *lowerdentry, 582 struct dentry *upperdentry, 583 unsigned int fallback); 584 int ovl_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, 585 struct iattr *attr); 586 int ovl_getattr(struct user_namespace *mnt_userns, const struct path *path, 587 struct kstat *stat, u32 request_mask, unsigned int flags); 588 int ovl_permission(struct user_namespace *mnt_userns, struct inode *inode, 589 int mask); 590 int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, 591 const void *value, size_t size, int flags); 592 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name, 593 void *value, size_t size); 594 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); 595 596 #ifdef CONFIG_FS_POSIX_ACL 597 struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu); 598 #else 599 #define ovl_get_acl NULL 600 #endif 601 602 int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags); 603 bool ovl_is_private_xattr(struct super_block *sb, const char *name); 604 605 struct ovl_inode_params { 606 struct inode *newinode; 607 struct dentry *upperdentry; 608 struct ovl_path *lowerpath; 609 bool index; 610 unsigned int numlower; 611 char *redirect; 612 struct dentry *lowerdata; 613 }; 614 void ovl_inode_init(struct inode *inode, struct ovl_inode_params *oip, 615 unsigned long ino, int fsid); 616 struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, dev_t rdev); 617 struct inode *ovl_lookup_inode(struct super_block *sb, struct dentry *real, 618 bool is_upper); 619 bool ovl_lookup_trap_inode(struct super_block *sb, struct dentry *dir); 620 struct inode *ovl_get_trap_inode(struct super_block *sb, struct dentry *dir); 621 struct inode *ovl_get_inode(struct super_block *sb, 622 struct ovl_inode_params *oip); 623 void ovl_copyattr(struct inode *to); 624 625 /* vfs inode flags copied from real to ovl inode */ 626 #define OVL_COPY_I_FLAGS_MASK (S_SYNC | S_NOATIME | S_APPEND | S_IMMUTABLE) 627 /* vfs inode flags read from overlay.protattr xattr to ovl inode */ 628 #define OVL_PROT_I_FLAGS_MASK (S_APPEND | S_IMMUTABLE) 629 630 /* 631 * fileattr flags copied from lower to upper inode on copy up. 632 * We cannot copy up immutable/append-only flags, because that would prevent 633 * linking temp inode to upper dir, so we store them in xattr instead. 634 */ 635 #define OVL_COPY_FS_FLAGS_MASK (FS_SYNC_FL | FS_NOATIME_FL) 636 #define OVL_COPY_FSX_FLAGS_MASK (FS_XFLAG_SYNC | FS_XFLAG_NOATIME) 637 #define OVL_PROT_FS_FLAGS_MASK (FS_APPEND_FL | FS_IMMUTABLE_FL) 638 #define OVL_PROT_FSX_FLAGS_MASK (FS_XFLAG_APPEND | FS_XFLAG_IMMUTABLE) 639 640 void ovl_check_protattr(struct inode *inode, struct dentry *upper); 641 int ovl_set_protattr(struct inode *inode, struct dentry *upper, 642 struct fileattr *fa); 643 644 static inline void ovl_copyflags(struct inode *from, struct inode *to) 645 { 646 unsigned int mask = OVL_COPY_I_FLAGS_MASK; 647 648 inode_set_flags(to, from->i_flags & mask, mask); 649 } 650 651 /* dir.c */ 652 extern const struct inode_operations ovl_dir_inode_operations; 653 int ovl_cleanup_and_whiteout(struct ovl_fs *ofs, struct inode *dir, 654 struct dentry *dentry); 655 struct ovl_cattr { 656 dev_t rdev; 657 umode_t mode; 658 const char *link; 659 struct dentry *hardlink; 660 }; 661 662 #define OVL_CATTR(m) (&(struct ovl_cattr) { .mode = (m) }) 663 664 int ovl_mkdir_real(struct ovl_fs *ofs, struct inode *dir, 665 struct dentry **newdentry, umode_t mode); 666 struct dentry *ovl_create_real(struct ovl_fs *ofs, 667 struct inode *dir, struct dentry *newdentry, 668 struct ovl_cattr *attr); 669 int ovl_cleanup(struct ovl_fs *ofs, struct inode *dir, struct dentry *dentry); 670 struct dentry *ovl_lookup_temp(struct ovl_fs *ofs, struct dentry *workdir); 671 struct dentry *ovl_create_temp(struct ovl_fs *ofs, struct dentry *workdir, 672 struct ovl_cattr *attr); 673 674 /* file.c */ 675 extern const struct file_operations ovl_file_operations; 676 int __init ovl_aio_request_cache_init(void); 677 void ovl_aio_request_cache_destroy(void); 678 int ovl_real_fileattr_get(const struct path *realpath, struct fileattr *fa); 679 int ovl_real_fileattr_set(const struct path *realpath, struct fileattr *fa); 680 int ovl_fileattr_get(struct dentry *dentry, struct fileattr *fa); 681 int ovl_fileattr_set(struct user_namespace *mnt_userns, 682 struct dentry *dentry, struct fileattr *fa); 683 684 /* copy_up.c */ 685 int ovl_copy_up(struct dentry *dentry); 686 int ovl_copy_up_with_data(struct dentry *dentry); 687 int ovl_maybe_copy_up(struct dentry *dentry, int flags); 688 int ovl_copy_xattr(struct super_block *sb, const struct path *path, struct dentry *new); 689 int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upper, struct kstat *stat); 690 struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real, 691 bool is_upper); 692 int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower, 693 struct dentry *upper); 694 695 /* export.c */ 696 extern const struct export_operations ovl_export_operations; 697