1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2000-2006 Silicon Graphics, Inc. 4 * All Rights Reserved. 5 */ 6 #include "xfs.h" 7 #include "xfs_fs.h" 8 #include "xfs_shared.h" 9 #include "xfs_format.h" 10 #include "xfs_log_format.h" 11 #include "xfs_trans_resv.h" 12 #include "xfs_mount.h" 13 #include "xfs_inode.h" 14 #include "xfs_errortag.h" 15 #include "xfs_error.h" 16 #include "xfs_icache.h" 17 #include "xfs_trans.h" 18 #include "xfs_ialloc.h" 19 #include "xfs_dir2.h" 20 21 #include <linux/iversion.h> 22 23 /* 24 * Check that none of the inode's in the buffer have a next 25 * unlinked field of 0. 26 */ 27 #if defined(DEBUG) 28 void 29 xfs_inobp_check( 30 xfs_mount_t *mp, 31 xfs_buf_t *bp) 32 { 33 int i; 34 xfs_dinode_t *dip; 35 36 for (i = 0; i < M_IGEO(mp)->inodes_per_cluster; i++) { 37 dip = xfs_buf_offset(bp, i * mp->m_sb.sb_inodesize); 38 if (!dip->di_next_unlinked) { 39 xfs_alert(mp, 40 "Detected bogus zero next_unlinked field in inode %d buffer 0x%llx.", 41 i, (long long)bp->b_bn); 42 } 43 } 44 } 45 #endif 46 47 /* 48 * If we are doing readahead on an inode buffer, we might be in log recovery 49 * reading an inode allocation buffer that hasn't yet been replayed, and hence 50 * has not had the inode cores stamped into it. Hence for readahead, the buffer 51 * may be potentially invalid. 52 * 53 * If the readahead buffer is invalid, we need to mark it with an error and 54 * clear the DONE status of the buffer so that a followup read will re-read it 55 * from disk. We don't report the error otherwise to avoid warnings during log 56 * recovery and we don't get unnecssary panics on debug kernels. We use EIO here 57 * because all we want to do is say readahead failed; there is no-one to report 58 * the error to, so this will distinguish it from a non-ra verifier failure. 59 * Changes to this readahead error behavour also need to be reflected in 60 * xfs_dquot_buf_readahead_verify(). 61 */ 62 static void 63 xfs_inode_buf_verify( 64 struct xfs_buf *bp, 65 bool readahead) 66 { 67 struct xfs_mount *mp = bp->b_mount; 68 xfs_agnumber_t agno; 69 int i; 70 int ni; 71 72 /* 73 * Validate the magic number and version of every inode in the buffer 74 */ 75 agno = xfs_daddr_to_agno(mp, XFS_BUF_ADDR(bp)); 76 ni = XFS_BB_TO_FSB(mp, bp->b_length) * mp->m_sb.sb_inopblock; 77 for (i = 0; i < ni; i++) { 78 int di_ok; 79 xfs_dinode_t *dip; 80 xfs_agino_t unlinked_ino; 81 82 dip = xfs_buf_offset(bp, (i << mp->m_sb.sb_inodelog)); 83 unlinked_ino = be32_to_cpu(dip->di_next_unlinked); 84 di_ok = xfs_verify_magic16(bp, dip->di_magic) && 85 xfs_dinode_good_version(&mp->m_sb, dip->di_version) && 86 xfs_verify_agino_or_null(mp, agno, unlinked_ino); 87 if (unlikely(XFS_TEST_ERROR(!di_ok, mp, 88 XFS_ERRTAG_ITOBP_INOTOBP))) { 89 if (readahead) { 90 bp->b_flags &= ~XBF_DONE; 91 xfs_buf_ioerror(bp, -EIO); 92 return; 93 } 94 95 #ifdef DEBUG 96 xfs_alert(mp, 97 "bad inode magic/vsn daddr %lld #%d (magic=%x)", 98 (unsigned long long)bp->b_bn, i, 99 be16_to_cpu(dip->di_magic)); 100 #endif 101 xfs_buf_verifier_error(bp, -EFSCORRUPTED, 102 __func__, dip, sizeof(*dip), 103 NULL); 104 return; 105 } 106 } 107 } 108 109 110 static void 111 xfs_inode_buf_read_verify( 112 struct xfs_buf *bp) 113 { 114 xfs_inode_buf_verify(bp, false); 115 } 116 117 static void 118 xfs_inode_buf_readahead_verify( 119 struct xfs_buf *bp) 120 { 121 xfs_inode_buf_verify(bp, true); 122 } 123 124 static void 125 xfs_inode_buf_write_verify( 126 struct xfs_buf *bp) 127 { 128 xfs_inode_buf_verify(bp, false); 129 } 130 131 const struct xfs_buf_ops xfs_inode_buf_ops = { 132 .name = "xfs_inode", 133 .magic16 = { cpu_to_be16(XFS_DINODE_MAGIC), 134 cpu_to_be16(XFS_DINODE_MAGIC) }, 135 .verify_read = xfs_inode_buf_read_verify, 136 .verify_write = xfs_inode_buf_write_verify, 137 }; 138 139 const struct xfs_buf_ops xfs_inode_buf_ra_ops = { 140 .name = "xfs_inode_ra", 141 .magic16 = { cpu_to_be16(XFS_DINODE_MAGIC), 142 cpu_to_be16(XFS_DINODE_MAGIC) }, 143 .verify_read = xfs_inode_buf_readahead_verify, 144 .verify_write = xfs_inode_buf_write_verify, 145 }; 146 147 148 /* 149 * This routine is called to map an inode to the buffer containing the on-disk 150 * version of the inode. It returns a pointer to the buffer containing the 151 * on-disk inode in the bpp parameter, and in the dipp parameter it returns a 152 * pointer to the on-disk inode within that buffer. 153 * 154 * If a non-zero error is returned, then the contents of bpp and dipp are 155 * undefined. 156 */ 157 int 158 xfs_imap_to_bp( 159 struct xfs_mount *mp, 160 struct xfs_trans *tp, 161 struct xfs_imap *imap, 162 struct xfs_dinode **dipp, 163 struct xfs_buf **bpp, 164 uint buf_flags, 165 uint iget_flags) 166 { 167 struct xfs_buf *bp; 168 int error; 169 170 buf_flags |= XBF_UNMAPPED; 171 error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, imap->im_blkno, 172 (int)imap->im_len, buf_flags, &bp, 173 &xfs_inode_buf_ops); 174 if (error) { 175 if (error == -EAGAIN) { 176 ASSERT(buf_flags & XBF_TRYLOCK); 177 return error; 178 } 179 xfs_warn(mp, "%s: xfs_trans_read_buf() returned error %d.", 180 __func__, error); 181 return error; 182 } 183 184 *bpp = bp; 185 *dipp = xfs_buf_offset(bp, imap->im_boffset); 186 return 0; 187 } 188 189 void 190 xfs_inode_from_disk( 191 struct xfs_inode *ip, 192 struct xfs_dinode *from) 193 { 194 struct xfs_icdinode *to = &ip->i_d; 195 struct inode *inode = VFS_I(ip); 196 197 /* 198 * Convert v1 inodes immediately to v2 inode format as this is the 199 * minimum inode version format we support in the rest of the code. 200 * They will also be unconditionally written back to disk as v2 inodes. 201 */ 202 if (unlikely(from->di_version == 1)) { 203 set_nlink(inode, be16_to_cpu(from->di_onlink)); 204 to->di_projid = 0; 205 } else { 206 set_nlink(inode, be32_to_cpu(from->di_nlink)); 207 to->di_projid = (prid_t)be16_to_cpu(from->di_projid_hi) << 16 | 208 be16_to_cpu(from->di_projid_lo); 209 } 210 211 to->di_format = from->di_format; 212 i_uid_write(inode, be32_to_cpu(from->di_uid)); 213 i_gid_write(inode, be32_to_cpu(from->di_gid)); 214 to->di_flushiter = be16_to_cpu(from->di_flushiter); 215 216 /* 217 * Time is signed, so need to convert to signed 32 bit before 218 * storing in inode timestamp which may be 64 bit. Otherwise 219 * a time before epoch is converted to a time long after epoch 220 * on 64 bit systems. 221 */ 222 inode->i_atime.tv_sec = (int)be32_to_cpu(from->di_atime.t_sec); 223 inode->i_atime.tv_nsec = (int)be32_to_cpu(from->di_atime.t_nsec); 224 inode->i_mtime.tv_sec = (int)be32_to_cpu(from->di_mtime.t_sec); 225 inode->i_mtime.tv_nsec = (int)be32_to_cpu(from->di_mtime.t_nsec); 226 inode->i_ctime.tv_sec = (int)be32_to_cpu(from->di_ctime.t_sec); 227 inode->i_ctime.tv_nsec = (int)be32_to_cpu(from->di_ctime.t_nsec); 228 inode->i_generation = be32_to_cpu(from->di_gen); 229 inode->i_mode = be16_to_cpu(from->di_mode); 230 231 to->di_size = be64_to_cpu(from->di_size); 232 to->di_nblocks = be64_to_cpu(from->di_nblocks); 233 to->di_extsize = be32_to_cpu(from->di_extsize); 234 to->di_nextents = be32_to_cpu(from->di_nextents); 235 to->di_anextents = be16_to_cpu(from->di_anextents); 236 to->di_forkoff = from->di_forkoff; 237 to->di_aformat = from->di_aformat; 238 to->di_dmevmask = be32_to_cpu(from->di_dmevmask); 239 to->di_dmstate = be16_to_cpu(from->di_dmstate); 240 to->di_flags = be16_to_cpu(from->di_flags); 241 242 if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb)) { 243 inode_set_iversion_queried(inode, 244 be64_to_cpu(from->di_changecount)); 245 to->di_crtime.tv_sec = be32_to_cpu(from->di_crtime.t_sec); 246 to->di_crtime.tv_nsec = be32_to_cpu(from->di_crtime.t_nsec); 247 to->di_flags2 = be64_to_cpu(from->di_flags2); 248 to->di_cowextsize = be32_to_cpu(from->di_cowextsize); 249 } 250 } 251 252 void 253 xfs_inode_to_disk( 254 struct xfs_inode *ip, 255 struct xfs_dinode *to, 256 xfs_lsn_t lsn) 257 { 258 struct xfs_icdinode *from = &ip->i_d; 259 struct inode *inode = VFS_I(ip); 260 261 to->di_magic = cpu_to_be16(XFS_DINODE_MAGIC); 262 to->di_onlink = 0; 263 264 to->di_format = from->di_format; 265 to->di_uid = cpu_to_be32(i_uid_read(inode)); 266 to->di_gid = cpu_to_be32(i_gid_read(inode)); 267 to->di_projid_lo = cpu_to_be16(from->di_projid & 0xffff); 268 to->di_projid_hi = cpu_to_be16(from->di_projid >> 16); 269 270 memset(to->di_pad, 0, sizeof(to->di_pad)); 271 to->di_atime.t_sec = cpu_to_be32(inode->i_atime.tv_sec); 272 to->di_atime.t_nsec = cpu_to_be32(inode->i_atime.tv_nsec); 273 to->di_mtime.t_sec = cpu_to_be32(inode->i_mtime.tv_sec); 274 to->di_mtime.t_nsec = cpu_to_be32(inode->i_mtime.tv_nsec); 275 to->di_ctime.t_sec = cpu_to_be32(inode->i_ctime.tv_sec); 276 to->di_ctime.t_nsec = cpu_to_be32(inode->i_ctime.tv_nsec); 277 to->di_nlink = cpu_to_be32(inode->i_nlink); 278 to->di_gen = cpu_to_be32(inode->i_generation); 279 to->di_mode = cpu_to_be16(inode->i_mode); 280 281 to->di_size = cpu_to_be64(from->di_size); 282 to->di_nblocks = cpu_to_be64(from->di_nblocks); 283 to->di_extsize = cpu_to_be32(from->di_extsize); 284 to->di_nextents = cpu_to_be32(from->di_nextents); 285 to->di_anextents = cpu_to_be16(from->di_anextents); 286 to->di_forkoff = from->di_forkoff; 287 to->di_aformat = from->di_aformat; 288 to->di_dmevmask = cpu_to_be32(from->di_dmevmask); 289 to->di_dmstate = cpu_to_be16(from->di_dmstate); 290 to->di_flags = cpu_to_be16(from->di_flags); 291 292 if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb)) { 293 to->di_version = 3; 294 to->di_changecount = cpu_to_be64(inode_peek_iversion(inode)); 295 to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.tv_sec); 296 to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.tv_nsec); 297 to->di_flags2 = cpu_to_be64(from->di_flags2); 298 to->di_cowextsize = cpu_to_be32(from->di_cowextsize); 299 to->di_ino = cpu_to_be64(ip->i_ino); 300 to->di_lsn = cpu_to_be64(lsn); 301 memset(to->di_pad2, 0, sizeof(to->di_pad2)); 302 uuid_copy(&to->di_uuid, &ip->i_mount->m_sb.sb_meta_uuid); 303 to->di_flushiter = 0; 304 } else { 305 to->di_version = 2; 306 to->di_flushiter = cpu_to_be16(from->di_flushiter); 307 } 308 } 309 310 void 311 xfs_log_dinode_to_disk( 312 struct xfs_log_dinode *from, 313 struct xfs_dinode *to) 314 { 315 to->di_magic = cpu_to_be16(from->di_magic); 316 to->di_mode = cpu_to_be16(from->di_mode); 317 to->di_version = from->di_version; 318 to->di_format = from->di_format; 319 to->di_onlink = 0; 320 to->di_uid = cpu_to_be32(from->di_uid); 321 to->di_gid = cpu_to_be32(from->di_gid); 322 to->di_nlink = cpu_to_be32(from->di_nlink); 323 to->di_projid_lo = cpu_to_be16(from->di_projid_lo); 324 to->di_projid_hi = cpu_to_be16(from->di_projid_hi); 325 memcpy(to->di_pad, from->di_pad, sizeof(to->di_pad)); 326 327 to->di_atime.t_sec = cpu_to_be32(from->di_atime.t_sec); 328 to->di_atime.t_nsec = cpu_to_be32(from->di_atime.t_nsec); 329 to->di_mtime.t_sec = cpu_to_be32(from->di_mtime.t_sec); 330 to->di_mtime.t_nsec = cpu_to_be32(from->di_mtime.t_nsec); 331 to->di_ctime.t_sec = cpu_to_be32(from->di_ctime.t_sec); 332 to->di_ctime.t_nsec = cpu_to_be32(from->di_ctime.t_nsec); 333 334 to->di_size = cpu_to_be64(from->di_size); 335 to->di_nblocks = cpu_to_be64(from->di_nblocks); 336 to->di_extsize = cpu_to_be32(from->di_extsize); 337 to->di_nextents = cpu_to_be32(from->di_nextents); 338 to->di_anextents = cpu_to_be16(from->di_anextents); 339 to->di_forkoff = from->di_forkoff; 340 to->di_aformat = from->di_aformat; 341 to->di_dmevmask = cpu_to_be32(from->di_dmevmask); 342 to->di_dmstate = cpu_to_be16(from->di_dmstate); 343 to->di_flags = cpu_to_be16(from->di_flags); 344 to->di_gen = cpu_to_be32(from->di_gen); 345 346 if (from->di_version == 3) { 347 to->di_changecount = cpu_to_be64(from->di_changecount); 348 to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.t_sec); 349 to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.t_nsec); 350 to->di_flags2 = cpu_to_be64(from->di_flags2); 351 to->di_cowextsize = cpu_to_be32(from->di_cowextsize); 352 to->di_ino = cpu_to_be64(from->di_ino); 353 to->di_lsn = cpu_to_be64(from->di_lsn); 354 memcpy(to->di_pad2, from->di_pad2, sizeof(to->di_pad2)); 355 uuid_copy(&to->di_uuid, &from->di_uuid); 356 to->di_flushiter = 0; 357 } else { 358 to->di_flushiter = cpu_to_be16(from->di_flushiter); 359 } 360 } 361 362 static xfs_failaddr_t 363 xfs_dinode_verify_fork( 364 struct xfs_dinode *dip, 365 struct xfs_mount *mp, 366 int whichfork) 367 { 368 uint32_t di_nextents = XFS_DFORK_NEXTENTS(dip, whichfork); 369 370 switch (XFS_DFORK_FORMAT(dip, whichfork)) { 371 case XFS_DINODE_FMT_LOCAL: 372 /* 373 * no local regular files yet 374 */ 375 if (whichfork == XFS_DATA_FORK) { 376 if (S_ISREG(be16_to_cpu(dip->di_mode))) 377 return __this_address; 378 if (be64_to_cpu(dip->di_size) > 379 XFS_DFORK_SIZE(dip, mp, whichfork)) 380 return __this_address; 381 } 382 if (di_nextents) 383 return __this_address; 384 break; 385 case XFS_DINODE_FMT_EXTENTS: 386 if (di_nextents > XFS_DFORK_MAXEXT(dip, mp, whichfork)) 387 return __this_address; 388 break; 389 case XFS_DINODE_FMT_BTREE: 390 if (whichfork == XFS_ATTR_FORK) { 391 if (di_nextents > MAXAEXTNUM) 392 return __this_address; 393 } else if (di_nextents > MAXEXTNUM) { 394 return __this_address; 395 } 396 break; 397 default: 398 return __this_address; 399 } 400 return NULL; 401 } 402 403 static xfs_failaddr_t 404 xfs_dinode_verify_forkoff( 405 struct xfs_dinode *dip, 406 struct xfs_mount *mp) 407 { 408 if (!XFS_DFORK_Q(dip)) 409 return NULL; 410 411 switch (dip->di_format) { 412 case XFS_DINODE_FMT_DEV: 413 if (dip->di_forkoff != (roundup(sizeof(xfs_dev_t), 8) >> 3)) 414 return __this_address; 415 break; 416 case XFS_DINODE_FMT_LOCAL: /* fall through ... */ 417 case XFS_DINODE_FMT_EXTENTS: /* fall through ... */ 418 case XFS_DINODE_FMT_BTREE: 419 if (dip->di_forkoff >= (XFS_LITINO(mp) >> 3)) 420 return __this_address; 421 break; 422 default: 423 return __this_address; 424 } 425 return NULL; 426 } 427 428 xfs_failaddr_t 429 xfs_dinode_verify( 430 struct xfs_mount *mp, 431 xfs_ino_t ino, 432 struct xfs_dinode *dip) 433 { 434 xfs_failaddr_t fa; 435 uint16_t mode; 436 uint16_t flags; 437 uint64_t flags2; 438 uint64_t di_size; 439 440 if (dip->di_magic != cpu_to_be16(XFS_DINODE_MAGIC)) 441 return __this_address; 442 443 /* Verify v3 integrity information first */ 444 if (dip->di_version >= 3) { 445 if (!xfs_sb_version_has_v3inode(&mp->m_sb)) 446 return __this_address; 447 if (!xfs_verify_cksum((char *)dip, mp->m_sb.sb_inodesize, 448 XFS_DINODE_CRC_OFF)) 449 return __this_address; 450 if (be64_to_cpu(dip->di_ino) != ino) 451 return __this_address; 452 if (!uuid_equal(&dip->di_uuid, &mp->m_sb.sb_meta_uuid)) 453 return __this_address; 454 } 455 456 /* don't allow invalid i_size */ 457 di_size = be64_to_cpu(dip->di_size); 458 if (di_size & (1ULL << 63)) 459 return __this_address; 460 461 mode = be16_to_cpu(dip->di_mode); 462 if (mode && xfs_mode_to_ftype(mode) == XFS_DIR3_FT_UNKNOWN) 463 return __this_address; 464 465 /* No zero-length symlinks/dirs. */ 466 if ((S_ISLNK(mode) || S_ISDIR(mode)) && di_size == 0) 467 return __this_address; 468 469 /* Fork checks carried over from xfs_iformat_fork */ 470 if (mode && 471 be32_to_cpu(dip->di_nextents) + be16_to_cpu(dip->di_anextents) > 472 be64_to_cpu(dip->di_nblocks)) 473 return __this_address; 474 475 if (mode && XFS_DFORK_BOFF(dip) > mp->m_sb.sb_inodesize) 476 return __this_address; 477 478 flags = be16_to_cpu(dip->di_flags); 479 480 if (mode && (flags & XFS_DIFLAG_REALTIME) && !mp->m_rtdev_targp) 481 return __this_address; 482 483 /* check for illegal values of forkoff */ 484 fa = xfs_dinode_verify_forkoff(dip, mp); 485 if (fa) 486 return fa; 487 488 /* Do we have appropriate data fork formats for the mode? */ 489 switch (mode & S_IFMT) { 490 case S_IFIFO: 491 case S_IFCHR: 492 case S_IFBLK: 493 case S_IFSOCK: 494 if (dip->di_format != XFS_DINODE_FMT_DEV) 495 return __this_address; 496 break; 497 case S_IFREG: 498 case S_IFLNK: 499 case S_IFDIR: 500 fa = xfs_dinode_verify_fork(dip, mp, XFS_DATA_FORK); 501 if (fa) 502 return fa; 503 break; 504 case 0: 505 /* Uninitialized inode ok. */ 506 break; 507 default: 508 return __this_address; 509 } 510 511 if (XFS_DFORK_Q(dip)) { 512 fa = xfs_dinode_verify_fork(dip, mp, XFS_ATTR_FORK); 513 if (fa) 514 return fa; 515 } else { 516 /* 517 * If there is no fork offset, this may be a freshly-made inode 518 * in a new disk cluster, in which case di_aformat is zeroed. 519 * Otherwise, such an inode must be in EXTENTS format; this goes 520 * for freed inodes as well. 521 */ 522 switch (dip->di_aformat) { 523 case 0: 524 case XFS_DINODE_FMT_EXTENTS: 525 break; 526 default: 527 return __this_address; 528 } 529 if (dip->di_anextents) 530 return __this_address; 531 } 532 533 /* extent size hint validation */ 534 fa = xfs_inode_validate_extsize(mp, be32_to_cpu(dip->di_extsize), 535 mode, flags); 536 if (fa) 537 return fa; 538 539 /* only version 3 or greater inodes are extensively verified here */ 540 if (dip->di_version < 3) 541 return NULL; 542 543 flags2 = be64_to_cpu(dip->di_flags2); 544 545 /* don't allow reflink/cowextsize if we don't have reflink */ 546 if ((flags2 & (XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE)) && 547 !xfs_sb_version_hasreflink(&mp->m_sb)) 548 return __this_address; 549 550 /* only regular files get reflink */ 551 if ((flags2 & XFS_DIFLAG2_REFLINK) && (mode & S_IFMT) != S_IFREG) 552 return __this_address; 553 554 /* don't let reflink and realtime mix */ 555 if ((flags2 & XFS_DIFLAG2_REFLINK) && (flags & XFS_DIFLAG_REALTIME)) 556 return __this_address; 557 558 /* don't let reflink and dax mix */ 559 if ((flags2 & XFS_DIFLAG2_REFLINK) && (flags2 & XFS_DIFLAG2_DAX)) 560 return __this_address; 561 562 /* COW extent size hint validation */ 563 fa = xfs_inode_validate_cowextsize(mp, be32_to_cpu(dip->di_cowextsize), 564 mode, flags, flags2); 565 if (fa) 566 return fa; 567 568 return NULL; 569 } 570 571 void 572 xfs_dinode_calc_crc( 573 struct xfs_mount *mp, 574 struct xfs_dinode *dip) 575 { 576 uint32_t crc; 577 578 if (dip->di_version < 3) 579 return; 580 581 ASSERT(xfs_sb_version_hascrc(&mp->m_sb)); 582 crc = xfs_start_cksum_update((char *)dip, mp->m_sb.sb_inodesize, 583 XFS_DINODE_CRC_OFF); 584 dip->di_crc = xfs_end_cksum(crc); 585 } 586 587 /* 588 * Read the disk inode attributes into the in-core inode structure. 589 * 590 * For version 5 superblocks, if we are initialising a new inode and we are not 591 * utilising the XFS_MOUNT_IKEEP inode cluster mode, we can simple build the new 592 * inode core with a random generation number. If we are keeping inodes around, 593 * we need to read the inode cluster to get the existing generation number off 594 * disk. Further, if we are using version 4 superblocks (i.e. v1/v2 inode 595 * format) then log recovery is dependent on the di_flushiter field being 596 * initialised from the current on-disk value and hence we must also read the 597 * inode off disk. 598 */ 599 int 600 xfs_iread( 601 xfs_mount_t *mp, 602 xfs_trans_t *tp, 603 xfs_inode_t *ip, 604 uint iget_flags) 605 { 606 xfs_buf_t *bp; 607 xfs_dinode_t *dip; 608 xfs_failaddr_t fa; 609 int error; 610 611 /* 612 * Fill in the location information in the in-core inode. 613 */ 614 error = xfs_imap(mp, tp, ip->i_ino, &ip->i_imap, iget_flags); 615 if (error) 616 return error; 617 618 /* shortcut IO on inode allocation if possible */ 619 if ((iget_flags & XFS_IGET_CREATE) && 620 xfs_sb_version_has_v3inode(&mp->m_sb) && 621 !(mp->m_flags & XFS_MOUNT_IKEEP)) { 622 VFS_I(ip)->i_generation = prandom_u32(); 623 return 0; 624 } 625 626 /* 627 * Get pointers to the on-disk inode and the buffer containing it. 628 */ 629 error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &dip, &bp, 0, iget_flags); 630 if (error) 631 return error; 632 633 /* even unallocated inodes are verified */ 634 fa = xfs_dinode_verify(mp, ip->i_ino, dip); 635 if (fa) { 636 xfs_inode_verifier_error(ip, -EFSCORRUPTED, "dinode", dip, 637 sizeof(*dip), fa); 638 error = -EFSCORRUPTED; 639 goto out_brelse; 640 } 641 642 /* 643 * If the on-disk inode is already linked to a directory 644 * entry, copy all of the inode into the in-core inode. 645 * xfs_iformat_fork() handles copying in the inode format 646 * specific information. 647 * Otherwise, just get the truly permanent information. 648 */ 649 if (dip->di_mode) { 650 xfs_inode_from_disk(ip, dip); 651 error = xfs_iformat_fork(ip, dip); 652 if (error) { 653 #ifdef DEBUG 654 xfs_alert(mp, "%s: xfs_iformat() returned error %d", 655 __func__, error); 656 #endif /* DEBUG */ 657 goto out_brelse; 658 } 659 } else { 660 /* 661 * Partial initialisation of the in-core inode. Just the bits 662 * that xfs_ialloc won't overwrite or relies on being correct. 663 */ 664 VFS_I(ip)->i_generation = be32_to_cpu(dip->di_gen); 665 ip->i_d.di_flushiter = be16_to_cpu(dip->di_flushiter); 666 667 /* 668 * Make sure to pull in the mode here as well in 669 * case the inode is released without being used. 670 * This ensures that xfs_inactive() will see that 671 * the inode is already free and not try to mess 672 * with the uninitialized part of it. 673 */ 674 VFS_I(ip)->i_mode = 0; 675 } 676 677 ip->i_delayed_blks = 0; 678 679 /* 680 * Mark the buffer containing the inode as something to keep 681 * around for a while. This helps to keep recently accessed 682 * meta-data in-core longer. 683 */ 684 xfs_buf_set_ref(bp, XFS_INO_REF); 685 686 /* 687 * Use xfs_trans_brelse() to release the buffer containing the on-disk 688 * inode, because it was acquired with xfs_trans_read_buf() in 689 * xfs_imap_to_bp() above. If tp is NULL, this is just a normal 690 * brelse(). If we're within a transaction, then xfs_trans_brelse() 691 * will only release the buffer if it is not dirty within the 692 * transaction. It will be OK to release the buffer in this case, 693 * because inodes on disk are never destroyed and we will be locking the 694 * new in-core inode before putting it in the cache where other 695 * processes can find it. Thus we don't have to worry about the inode 696 * being changed just because we released the buffer. 697 */ 698 out_brelse: 699 xfs_trans_brelse(tp, bp); 700 return error; 701 } 702 703 /* 704 * Validate di_extsize hint. 705 * 706 * The rules are documented at xfs_ioctl_setattr_check_extsize(). 707 * These functions must be kept in sync with each other. 708 */ 709 xfs_failaddr_t 710 xfs_inode_validate_extsize( 711 struct xfs_mount *mp, 712 uint32_t extsize, 713 uint16_t mode, 714 uint16_t flags) 715 { 716 bool rt_flag; 717 bool hint_flag; 718 bool inherit_flag; 719 uint32_t extsize_bytes; 720 uint32_t blocksize_bytes; 721 722 rt_flag = (flags & XFS_DIFLAG_REALTIME); 723 hint_flag = (flags & XFS_DIFLAG_EXTSIZE); 724 inherit_flag = (flags & XFS_DIFLAG_EXTSZINHERIT); 725 extsize_bytes = XFS_FSB_TO_B(mp, extsize); 726 727 if (rt_flag) 728 blocksize_bytes = mp->m_sb.sb_rextsize << mp->m_sb.sb_blocklog; 729 else 730 blocksize_bytes = mp->m_sb.sb_blocksize; 731 732 if ((hint_flag || inherit_flag) && !(S_ISDIR(mode) || S_ISREG(mode))) 733 return __this_address; 734 735 if (hint_flag && !S_ISREG(mode)) 736 return __this_address; 737 738 if (inherit_flag && !S_ISDIR(mode)) 739 return __this_address; 740 741 if ((hint_flag || inherit_flag) && extsize == 0) 742 return __this_address; 743 744 /* free inodes get flags set to zero but extsize remains */ 745 if (mode && !(hint_flag || inherit_flag) && extsize != 0) 746 return __this_address; 747 748 if (extsize_bytes % blocksize_bytes) 749 return __this_address; 750 751 if (extsize > MAXEXTLEN) 752 return __this_address; 753 754 if (!rt_flag && extsize > mp->m_sb.sb_agblocks / 2) 755 return __this_address; 756 757 return NULL; 758 } 759 760 /* 761 * Validate di_cowextsize hint. 762 * 763 * The rules are documented at xfs_ioctl_setattr_check_cowextsize(). 764 * These functions must be kept in sync with each other. 765 */ 766 xfs_failaddr_t 767 xfs_inode_validate_cowextsize( 768 struct xfs_mount *mp, 769 uint32_t cowextsize, 770 uint16_t mode, 771 uint16_t flags, 772 uint64_t flags2) 773 { 774 bool rt_flag; 775 bool hint_flag; 776 uint32_t cowextsize_bytes; 777 778 rt_flag = (flags & XFS_DIFLAG_REALTIME); 779 hint_flag = (flags2 & XFS_DIFLAG2_COWEXTSIZE); 780 cowextsize_bytes = XFS_FSB_TO_B(mp, cowextsize); 781 782 if (hint_flag && !xfs_sb_version_hasreflink(&mp->m_sb)) 783 return __this_address; 784 785 if (hint_flag && !(S_ISDIR(mode) || S_ISREG(mode))) 786 return __this_address; 787 788 if (hint_flag && cowextsize == 0) 789 return __this_address; 790 791 /* free inodes get flags set to zero but cowextsize remains */ 792 if (mode && !hint_flag && cowextsize != 0) 793 return __this_address; 794 795 if (hint_flag && rt_flag) 796 return __this_address; 797 798 if (cowextsize_bytes % mp->m_sb.sb_blocksize) 799 return __this_address; 800 801 if (cowextsize > MAXEXTLEN) 802 return __this_address; 803 804 if (cowextsize > mp->m_sb.sb_agblocks / 2) 805 return __this_address; 806 807 return NULL; 808 } 809