1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * inode.c - NILFS inode operations. 4 * 5 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation. 6 * 7 * Written by Ryusuke Konishi. 8 * 9 */ 10 11 #include <linux/buffer_head.h> 12 #include <linux/gfp.h> 13 #include <linux/mpage.h> 14 #include <linux/pagemap.h> 15 #include <linux/writeback.h> 16 #include <linux/uio.h> 17 #include "nilfs.h" 18 #include "btnode.h" 19 #include "segment.h" 20 #include "page.h" 21 #include "mdt.h" 22 #include "cpfile.h" 23 #include "ifile.h" 24 25 /** 26 * struct nilfs_iget_args - arguments used during comparison between inodes 27 * @ino: inode number 28 * @cno: checkpoint number 29 * @root: pointer on NILFS root object (mounted checkpoint) 30 * @for_gc: inode for GC flag 31 */ 32 struct nilfs_iget_args { 33 u64 ino; 34 __u64 cno; 35 struct nilfs_root *root; 36 int for_gc; 37 }; 38 39 static int nilfs_iget_test(struct inode *inode, void *opaque); 40 41 void nilfs_inode_add_blocks(struct inode *inode, int n) 42 { 43 struct nilfs_root *root = NILFS_I(inode)->i_root; 44 45 inode_add_bytes(inode, i_blocksize(inode) * n); 46 if (root) 47 atomic64_add(n, &root->blocks_count); 48 } 49 50 void nilfs_inode_sub_blocks(struct inode *inode, int n) 51 { 52 struct nilfs_root *root = NILFS_I(inode)->i_root; 53 54 inode_sub_bytes(inode, i_blocksize(inode) * n); 55 if (root) 56 atomic64_sub(n, &root->blocks_count); 57 } 58 59 /** 60 * nilfs_get_block() - get a file block on the filesystem (callback function) 61 * @inode - inode struct of the target file 62 * @blkoff - file block number 63 * @bh_result - buffer head to be mapped on 64 * @create - indicate whether allocating the block or not when it has not 65 * been allocated yet. 66 * 67 * This function does not issue actual read request of the specified data 68 * block. It is done by VFS. 69 */ 70 int nilfs_get_block(struct inode *inode, sector_t blkoff, 71 struct buffer_head *bh_result, int create) 72 { 73 struct nilfs_inode_info *ii = NILFS_I(inode); 74 struct the_nilfs *nilfs = inode->i_sb->s_fs_info; 75 __u64 blknum = 0; 76 int err = 0, ret; 77 unsigned int maxblocks = bh_result->b_size >> inode->i_blkbits; 78 79 down_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 80 ret = nilfs_bmap_lookup_contig(ii->i_bmap, blkoff, &blknum, maxblocks); 81 up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 82 if (ret >= 0) { /* found */ 83 map_bh(bh_result, inode->i_sb, blknum); 84 if (ret > 0) 85 bh_result->b_size = (ret << inode->i_blkbits); 86 goto out; 87 } 88 /* data block was not found */ 89 if (ret == -ENOENT && create) { 90 struct nilfs_transaction_info ti; 91 92 bh_result->b_blocknr = 0; 93 err = nilfs_transaction_begin(inode->i_sb, &ti, 1); 94 if (unlikely(err)) 95 goto out; 96 err = nilfs_bmap_insert(ii->i_bmap, blkoff, 97 (unsigned long)bh_result); 98 if (unlikely(err != 0)) { 99 if (err == -EEXIST) { 100 /* 101 * The get_block() function could be called 102 * from multiple callers for an inode. 103 * However, the page having this block must 104 * be locked in this case. 105 */ 106 nilfs_msg(inode->i_sb, KERN_WARNING, 107 "%s (ino=%lu): a race condition while inserting a data block at offset=%llu", 108 __func__, inode->i_ino, 109 (unsigned long long)blkoff); 110 err = 0; 111 } 112 nilfs_transaction_abort(inode->i_sb); 113 goto out; 114 } 115 nilfs_mark_inode_dirty_sync(inode); 116 nilfs_transaction_commit(inode->i_sb); /* never fails */ 117 /* Error handling should be detailed */ 118 set_buffer_new(bh_result); 119 set_buffer_delay(bh_result); 120 map_bh(bh_result, inode->i_sb, 0); 121 /* Disk block number must be changed to proper value */ 122 123 } else if (ret == -ENOENT) { 124 /* 125 * not found is not error (e.g. hole); must return without 126 * the mapped state flag. 127 */ 128 ; 129 } else { 130 err = ret; 131 } 132 133 out: 134 return err; 135 } 136 137 /** 138 * nilfs_readpage() - implement readpage() method of nilfs_aops {} 139 * address_space_operations. 140 * @file - file struct of the file to be read 141 * @page - the page to be read 142 */ 143 static int nilfs_readpage(struct file *file, struct page *page) 144 { 145 return mpage_readpage(page, nilfs_get_block); 146 } 147 148 static void nilfs_readahead(struct readahead_control *rac) 149 { 150 mpage_readahead(rac, nilfs_get_block); 151 } 152 153 static int nilfs_writepages(struct address_space *mapping, 154 struct writeback_control *wbc) 155 { 156 struct inode *inode = mapping->host; 157 int err = 0; 158 159 if (sb_rdonly(inode->i_sb)) { 160 nilfs_clear_dirty_pages(mapping, false); 161 return -EROFS; 162 } 163 164 if (wbc->sync_mode == WB_SYNC_ALL) 165 err = nilfs_construct_dsync_segment(inode->i_sb, inode, 166 wbc->range_start, 167 wbc->range_end); 168 return err; 169 } 170 171 static int nilfs_writepage(struct page *page, struct writeback_control *wbc) 172 { 173 struct inode *inode = page->mapping->host; 174 int err; 175 176 if (sb_rdonly(inode->i_sb)) { 177 /* 178 * It means that filesystem was remounted in read-only 179 * mode because of error or metadata corruption. But we 180 * have dirty pages that try to be flushed in background. 181 * So, here we simply discard this dirty page. 182 */ 183 nilfs_clear_dirty_page(page, false); 184 unlock_page(page); 185 return -EROFS; 186 } 187 188 redirty_page_for_writepage(wbc, page); 189 unlock_page(page); 190 191 if (wbc->sync_mode == WB_SYNC_ALL) { 192 err = nilfs_construct_segment(inode->i_sb); 193 if (unlikely(err)) 194 return err; 195 } else if (wbc->for_reclaim) 196 nilfs_flush_segment(inode->i_sb, inode->i_ino); 197 198 return 0; 199 } 200 201 static int nilfs_set_page_dirty(struct page *page) 202 { 203 struct inode *inode = page->mapping->host; 204 int ret = __set_page_dirty_nobuffers(page); 205 206 if (page_has_buffers(page)) { 207 unsigned int nr_dirty = 0; 208 struct buffer_head *bh, *head; 209 210 /* 211 * This page is locked by callers, and no other thread 212 * concurrently marks its buffers dirty since they are 213 * only dirtied through routines in fs/buffer.c in 214 * which call sites of mark_buffer_dirty are protected 215 * by page lock. 216 */ 217 bh = head = page_buffers(page); 218 do { 219 /* Do not mark hole blocks dirty */ 220 if (buffer_dirty(bh) || !buffer_mapped(bh)) 221 continue; 222 223 set_buffer_dirty(bh); 224 nr_dirty++; 225 } while (bh = bh->b_this_page, bh != head); 226 227 if (nr_dirty) 228 nilfs_set_file_dirty(inode, nr_dirty); 229 } else if (ret) { 230 unsigned int nr_dirty = 1 << (PAGE_SHIFT - inode->i_blkbits); 231 232 nilfs_set_file_dirty(inode, nr_dirty); 233 } 234 return ret; 235 } 236 237 void nilfs_write_failed(struct address_space *mapping, loff_t to) 238 { 239 struct inode *inode = mapping->host; 240 241 if (to > inode->i_size) { 242 truncate_pagecache(inode, inode->i_size); 243 nilfs_truncate(inode); 244 } 245 } 246 247 static int nilfs_write_begin(struct file *file, struct address_space *mapping, 248 loff_t pos, unsigned len, unsigned flags, 249 struct page **pagep, void **fsdata) 250 251 { 252 struct inode *inode = mapping->host; 253 int err = nilfs_transaction_begin(inode->i_sb, NULL, 1); 254 255 if (unlikely(err)) 256 return err; 257 258 err = block_write_begin(mapping, pos, len, flags, pagep, 259 nilfs_get_block); 260 if (unlikely(err)) { 261 nilfs_write_failed(mapping, pos + len); 262 nilfs_transaction_abort(inode->i_sb); 263 } 264 return err; 265 } 266 267 static int nilfs_write_end(struct file *file, struct address_space *mapping, 268 loff_t pos, unsigned len, unsigned copied, 269 struct page *page, void *fsdata) 270 { 271 struct inode *inode = mapping->host; 272 unsigned int start = pos & (PAGE_SIZE - 1); 273 unsigned int nr_dirty; 274 int err; 275 276 nr_dirty = nilfs_page_count_clean_buffers(page, start, 277 start + copied); 278 copied = generic_write_end(file, mapping, pos, len, copied, page, 279 fsdata); 280 nilfs_set_file_dirty(inode, nr_dirty); 281 err = nilfs_transaction_commit(inode->i_sb); 282 return err ? : copied; 283 } 284 285 static ssize_t 286 nilfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) 287 { 288 struct inode *inode = file_inode(iocb->ki_filp); 289 290 if (iov_iter_rw(iter) == WRITE) 291 return 0; 292 293 /* Needs synchronization with the cleaner */ 294 return blockdev_direct_IO(iocb, inode, iter, nilfs_get_block); 295 } 296 297 const struct address_space_operations nilfs_aops = { 298 .writepage = nilfs_writepage, 299 .readpage = nilfs_readpage, 300 .writepages = nilfs_writepages, 301 .set_page_dirty = nilfs_set_page_dirty, 302 .readahead = nilfs_readahead, 303 .write_begin = nilfs_write_begin, 304 .write_end = nilfs_write_end, 305 /* .releasepage = nilfs_releasepage, */ 306 .invalidatepage = block_invalidatepage, 307 .direct_IO = nilfs_direct_IO, 308 .is_partially_uptodate = block_is_partially_uptodate, 309 }; 310 311 static int nilfs_insert_inode_locked(struct inode *inode, 312 struct nilfs_root *root, 313 unsigned long ino) 314 { 315 struct nilfs_iget_args args = { 316 .ino = ino, .root = root, .cno = 0, .for_gc = 0 317 }; 318 319 return insert_inode_locked4(inode, ino, nilfs_iget_test, &args); 320 } 321 322 struct inode *nilfs_new_inode(struct inode *dir, umode_t mode) 323 { 324 struct super_block *sb = dir->i_sb; 325 struct the_nilfs *nilfs = sb->s_fs_info; 326 struct inode *inode; 327 struct nilfs_inode_info *ii; 328 struct nilfs_root *root; 329 int err = -ENOMEM; 330 ino_t ino; 331 332 inode = new_inode(sb); 333 if (unlikely(!inode)) 334 goto failed; 335 336 mapping_set_gfp_mask(inode->i_mapping, 337 mapping_gfp_constraint(inode->i_mapping, ~__GFP_FS)); 338 339 root = NILFS_I(dir)->i_root; 340 ii = NILFS_I(inode); 341 ii->i_state = BIT(NILFS_I_NEW); 342 ii->i_root = root; 343 344 err = nilfs_ifile_create_inode(root->ifile, &ino, &ii->i_bh); 345 if (unlikely(err)) 346 goto failed_ifile_create_inode; 347 /* reference count of i_bh inherits from nilfs_mdt_read_block() */ 348 349 atomic64_inc(&root->inodes_count); 350 inode_init_owner(inode, dir, mode); 351 inode->i_ino = ino; 352 inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode); 353 354 if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) { 355 err = nilfs_bmap_read(ii->i_bmap, NULL); 356 if (err < 0) 357 goto failed_after_creation; 358 359 set_bit(NILFS_I_BMAP, &ii->i_state); 360 /* No lock is needed; iget() ensures it. */ 361 } 362 363 ii->i_flags = nilfs_mask_flags( 364 mode, NILFS_I(dir)->i_flags & NILFS_FL_INHERITED); 365 366 /* ii->i_file_acl = 0; */ 367 /* ii->i_dir_acl = 0; */ 368 ii->i_dir_start_lookup = 0; 369 nilfs_set_inode_flags(inode); 370 spin_lock(&nilfs->ns_next_gen_lock); 371 inode->i_generation = nilfs->ns_next_generation++; 372 spin_unlock(&nilfs->ns_next_gen_lock); 373 if (nilfs_insert_inode_locked(inode, root, ino) < 0) { 374 err = -EIO; 375 goto failed_after_creation; 376 } 377 378 err = nilfs_init_acl(inode, dir); 379 if (unlikely(err)) 380 /* 381 * Never occur. When supporting nilfs_init_acl(), 382 * proper cancellation of above jobs should be considered. 383 */ 384 goto failed_after_creation; 385 386 return inode; 387 388 failed_after_creation: 389 clear_nlink(inode); 390 unlock_new_inode(inode); 391 iput(inode); /* 392 * raw_inode will be deleted through 393 * nilfs_evict_inode(). 394 */ 395 goto failed; 396 397 failed_ifile_create_inode: 398 make_bad_inode(inode); 399 iput(inode); 400 failed: 401 return ERR_PTR(err); 402 } 403 404 void nilfs_set_inode_flags(struct inode *inode) 405 { 406 unsigned int flags = NILFS_I(inode)->i_flags; 407 unsigned int new_fl = 0; 408 409 if (flags & FS_SYNC_FL) 410 new_fl |= S_SYNC; 411 if (flags & FS_APPEND_FL) 412 new_fl |= S_APPEND; 413 if (flags & FS_IMMUTABLE_FL) 414 new_fl |= S_IMMUTABLE; 415 if (flags & FS_NOATIME_FL) 416 new_fl |= S_NOATIME; 417 if (flags & FS_DIRSYNC_FL) 418 new_fl |= S_DIRSYNC; 419 inode_set_flags(inode, new_fl, S_SYNC | S_APPEND | S_IMMUTABLE | 420 S_NOATIME | S_DIRSYNC); 421 } 422 423 int nilfs_read_inode_common(struct inode *inode, 424 struct nilfs_inode *raw_inode) 425 { 426 struct nilfs_inode_info *ii = NILFS_I(inode); 427 int err; 428 429 inode->i_mode = le16_to_cpu(raw_inode->i_mode); 430 i_uid_write(inode, le32_to_cpu(raw_inode->i_uid)); 431 i_gid_write(inode, le32_to_cpu(raw_inode->i_gid)); 432 set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); 433 inode->i_size = le64_to_cpu(raw_inode->i_size); 434 inode->i_atime.tv_sec = le64_to_cpu(raw_inode->i_mtime); 435 inode->i_ctime.tv_sec = le64_to_cpu(raw_inode->i_ctime); 436 inode->i_mtime.tv_sec = le64_to_cpu(raw_inode->i_mtime); 437 inode->i_atime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec); 438 inode->i_ctime.tv_nsec = le32_to_cpu(raw_inode->i_ctime_nsec); 439 inode->i_mtime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec); 440 if (inode->i_nlink == 0) 441 return -ESTALE; /* this inode is deleted */ 442 443 inode->i_blocks = le64_to_cpu(raw_inode->i_blocks); 444 ii->i_flags = le32_to_cpu(raw_inode->i_flags); 445 #if 0 446 ii->i_file_acl = le32_to_cpu(raw_inode->i_file_acl); 447 ii->i_dir_acl = S_ISREG(inode->i_mode) ? 448 0 : le32_to_cpu(raw_inode->i_dir_acl); 449 #endif 450 ii->i_dir_start_lookup = 0; 451 inode->i_generation = le32_to_cpu(raw_inode->i_generation); 452 453 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || 454 S_ISLNK(inode->i_mode)) { 455 err = nilfs_bmap_read(ii->i_bmap, raw_inode); 456 if (err < 0) 457 return err; 458 set_bit(NILFS_I_BMAP, &ii->i_state); 459 /* No lock is needed; iget() ensures it. */ 460 } 461 return 0; 462 } 463 464 static int __nilfs_read_inode(struct super_block *sb, 465 struct nilfs_root *root, unsigned long ino, 466 struct inode *inode) 467 { 468 struct the_nilfs *nilfs = sb->s_fs_info; 469 struct buffer_head *bh; 470 struct nilfs_inode *raw_inode; 471 int err; 472 473 down_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 474 err = nilfs_ifile_get_inode_block(root->ifile, ino, &bh); 475 if (unlikely(err)) 476 goto bad_inode; 477 478 raw_inode = nilfs_ifile_map_inode(root->ifile, ino, bh); 479 480 err = nilfs_read_inode_common(inode, raw_inode); 481 if (err) 482 goto failed_unmap; 483 484 if (S_ISREG(inode->i_mode)) { 485 inode->i_op = &nilfs_file_inode_operations; 486 inode->i_fop = &nilfs_file_operations; 487 inode->i_mapping->a_ops = &nilfs_aops; 488 } else if (S_ISDIR(inode->i_mode)) { 489 inode->i_op = &nilfs_dir_inode_operations; 490 inode->i_fop = &nilfs_dir_operations; 491 inode->i_mapping->a_ops = &nilfs_aops; 492 } else if (S_ISLNK(inode->i_mode)) { 493 inode->i_op = &nilfs_symlink_inode_operations; 494 inode_nohighmem(inode); 495 inode->i_mapping->a_ops = &nilfs_aops; 496 } else { 497 inode->i_op = &nilfs_special_inode_operations; 498 init_special_inode( 499 inode, inode->i_mode, 500 huge_decode_dev(le64_to_cpu(raw_inode->i_device_code))); 501 } 502 nilfs_ifile_unmap_inode(root->ifile, ino, bh); 503 brelse(bh); 504 up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 505 nilfs_set_inode_flags(inode); 506 mapping_set_gfp_mask(inode->i_mapping, 507 mapping_gfp_constraint(inode->i_mapping, ~__GFP_FS)); 508 return 0; 509 510 failed_unmap: 511 nilfs_ifile_unmap_inode(root->ifile, ino, bh); 512 brelse(bh); 513 514 bad_inode: 515 up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 516 return err; 517 } 518 519 static int nilfs_iget_test(struct inode *inode, void *opaque) 520 { 521 struct nilfs_iget_args *args = opaque; 522 struct nilfs_inode_info *ii; 523 524 if (args->ino != inode->i_ino || args->root != NILFS_I(inode)->i_root) 525 return 0; 526 527 ii = NILFS_I(inode); 528 if (!test_bit(NILFS_I_GCINODE, &ii->i_state)) 529 return !args->for_gc; 530 531 return args->for_gc && args->cno == ii->i_cno; 532 } 533 534 static int nilfs_iget_set(struct inode *inode, void *opaque) 535 { 536 struct nilfs_iget_args *args = opaque; 537 538 inode->i_ino = args->ino; 539 if (args->for_gc) { 540 NILFS_I(inode)->i_state = BIT(NILFS_I_GCINODE); 541 NILFS_I(inode)->i_cno = args->cno; 542 NILFS_I(inode)->i_root = NULL; 543 } else { 544 if (args->root && args->ino == NILFS_ROOT_INO) 545 nilfs_get_root(args->root); 546 NILFS_I(inode)->i_root = args->root; 547 } 548 return 0; 549 } 550 551 struct inode *nilfs_ilookup(struct super_block *sb, struct nilfs_root *root, 552 unsigned long ino) 553 { 554 struct nilfs_iget_args args = { 555 .ino = ino, .root = root, .cno = 0, .for_gc = 0 556 }; 557 558 return ilookup5(sb, ino, nilfs_iget_test, &args); 559 } 560 561 struct inode *nilfs_iget_locked(struct super_block *sb, struct nilfs_root *root, 562 unsigned long ino) 563 { 564 struct nilfs_iget_args args = { 565 .ino = ino, .root = root, .cno = 0, .for_gc = 0 566 }; 567 568 return iget5_locked(sb, ino, nilfs_iget_test, nilfs_iget_set, &args); 569 } 570 571 struct inode *nilfs_iget(struct super_block *sb, struct nilfs_root *root, 572 unsigned long ino) 573 { 574 struct inode *inode; 575 int err; 576 577 inode = nilfs_iget_locked(sb, root, ino); 578 if (unlikely(!inode)) 579 return ERR_PTR(-ENOMEM); 580 if (!(inode->i_state & I_NEW)) 581 return inode; 582 583 err = __nilfs_read_inode(sb, root, ino, inode); 584 if (unlikely(err)) { 585 iget_failed(inode); 586 return ERR_PTR(err); 587 } 588 unlock_new_inode(inode); 589 return inode; 590 } 591 592 struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino, 593 __u64 cno) 594 { 595 struct nilfs_iget_args args = { 596 .ino = ino, .root = NULL, .cno = cno, .for_gc = 1 597 }; 598 struct inode *inode; 599 int err; 600 601 inode = iget5_locked(sb, ino, nilfs_iget_test, nilfs_iget_set, &args); 602 if (unlikely(!inode)) 603 return ERR_PTR(-ENOMEM); 604 if (!(inode->i_state & I_NEW)) 605 return inode; 606 607 err = nilfs_init_gcinode(inode); 608 if (unlikely(err)) { 609 iget_failed(inode); 610 return ERR_PTR(err); 611 } 612 unlock_new_inode(inode); 613 return inode; 614 } 615 616 void nilfs_write_inode_common(struct inode *inode, 617 struct nilfs_inode *raw_inode, int has_bmap) 618 { 619 struct nilfs_inode_info *ii = NILFS_I(inode); 620 621 raw_inode->i_mode = cpu_to_le16(inode->i_mode); 622 raw_inode->i_uid = cpu_to_le32(i_uid_read(inode)); 623 raw_inode->i_gid = cpu_to_le32(i_gid_read(inode)); 624 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink); 625 raw_inode->i_size = cpu_to_le64(inode->i_size); 626 raw_inode->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); 627 raw_inode->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec); 628 raw_inode->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); 629 raw_inode->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec); 630 raw_inode->i_blocks = cpu_to_le64(inode->i_blocks); 631 632 raw_inode->i_flags = cpu_to_le32(ii->i_flags); 633 raw_inode->i_generation = cpu_to_le32(inode->i_generation); 634 635 if (NILFS_ROOT_METADATA_FILE(inode->i_ino)) { 636 struct the_nilfs *nilfs = inode->i_sb->s_fs_info; 637 638 /* zero-fill unused portion in the case of super root block */ 639 raw_inode->i_xattr = 0; 640 raw_inode->i_pad = 0; 641 memset((void *)raw_inode + sizeof(*raw_inode), 0, 642 nilfs->ns_inode_size - sizeof(*raw_inode)); 643 } 644 645 if (has_bmap) 646 nilfs_bmap_write(ii->i_bmap, raw_inode); 647 else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) 648 raw_inode->i_device_code = 649 cpu_to_le64(huge_encode_dev(inode->i_rdev)); 650 /* 651 * When extending inode, nilfs->ns_inode_size should be checked 652 * for substitutions of appended fields. 653 */ 654 } 655 656 void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh, int flags) 657 { 658 ino_t ino = inode->i_ino; 659 struct nilfs_inode_info *ii = NILFS_I(inode); 660 struct inode *ifile = ii->i_root->ifile; 661 struct nilfs_inode *raw_inode; 662 663 raw_inode = nilfs_ifile_map_inode(ifile, ino, ibh); 664 665 if (test_and_clear_bit(NILFS_I_NEW, &ii->i_state)) 666 memset(raw_inode, 0, NILFS_MDT(ifile)->mi_entry_size); 667 if (flags & I_DIRTY_DATASYNC) 668 set_bit(NILFS_I_INODE_SYNC, &ii->i_state); 669 670 nilfs_write_inode_common(inode, raw_inode, 0); 671 /* 672 * XXX: call with has_bmap = 0 is a workaround to avoid 673 * deadlock of bmap. This delays update of i_bmap to just 674 * before writing. 675 */ 676 677 nilfs_ifile_unmap_inode(ifile, ino, ibh); 678 } 679 680 #define NILFS_MAX_TRUNCATE_BLOCKS 16384 /* 64MB for 4KB block */ 681 682 static void nilfs_truncate_bmap(struct nilfs_inode_info *ii, 683 unsigned long from) 684 { 685 __u64 b; 686 int ret; 687 688 if (!test_bit(NILFS_I_BMAP, &ii->i_state)) 689 return; 690 repeat: 691 ret = nilfs_bmap_last_key(ii->i_bmap, &b); 692 if (ret == -ENOENT) 693 return; 694 else if (ret < 0) 695 goto failed; 696 697 if (b < from) 698 return; 699 700 b -= min_t(__u64, NILFS_MAX_TRUNCATE_BLOCKS, b - from); 701 ret = nilfs_bmap_truncate(ii->i_bmap, b); 702 nilfs_relax_pressure_in_lock(ii->vfs_inode.i_sb); 703 if (!ret || (ret == -ENOMEM && 704 nilfs_bmap_truncate(ii->i_bmap, b) == 0)) 705 goto repeat; 706 707 failed: 708 nilfs_msg(ii->vfs_inode.i_sb, KERN_WARNING, 709 "error %d truncating bmap (ino=%lu)", ret, 710 ii->vfs_inode.i_ino); 711 } 712 713 void nilfs_truncate(struct inode *inode) 714 { 715 unsigned long blkoff; 716 unsigned int blocksize; 717 struct nilfs_transaction_info ti; 718 struct super_block *sb = inode->i_sb; 719 struct nilfs_inode_info *ii = NILFS_I(inode); 720 721 if (!test_bit(NILFS_I_BMAP, &ii->i_state)) 722 return; 723 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) 724 return; 725 726 blocksize = sb->s_blocksize; 727 blkoff = (inode->i_size + blocksize - 1) >> sb->s_blocksize_bits; 728 nilfs_transaction_begin(sb, &ti, 0); /* never fails */ 729 730 block_truncate_page(inode->i_mapping, inode->i_size, nilfs_get_block); 731 732 nilfs_truncate_bmap(ii, blkoff); 733 734 inode->i_mtime = inode->i_ctime = current_time(inode); 735 if (IS_SYNC(inode)) 736 nilfs_set_transaction_flag(NILFS_TI_SYNC); 737 738 nilfs_mark_inode_dirty(inode); 739 nilfs_set_file_dirty(inode, 0); 740 nilfs_transaction_commit(sb); 741 /* 742 * May construct a logical segment and may fail in sync mode. 743 * But truncate has no return value. 744 */ 745 } 746 747 static void nilfs_clear_inode(struct inode *inode) 748 { 749 struct nilfs_inode_info *ii = NILFS_I(inode); 750 751 /* 752 * Free resources allocated in nilfs_read_inode(), here. 753 */ 754 BUG_ON(!list_empty(&ii->i_dirty)); 755 brelse(ii->i_bh); 756 ii->i_bh = NULL; 757 758 if (nilfs_is_metadata_file_inode(inode)) 759 nilfs_mdt_clear(inode); 760 761 if (test_bit(NILFS_I_BMAP, &ii->i_state)) 762 nilfs_bmap_clear(ii->i_bmap); 763 764 nilfs_btnode_cache_clear(&ii->i_btnode_cache); 765 766 if (ii->i_root && inode->i_ino == NILFS_ROOT_INO) 767 nilfs_put_root(ii->i_root); 768 } 769 770 void nilfs_evict_inode(struct inode *inode) 771 { 772 struct nilfs_transaction_info ti; 773 struct super_block *sb = inode->i_sb; 774 struct nilfs_inode_info *ii = NILFS_I(inode); 775 int ret; 776 777 if (inode->i_nlink || !ii->i_root || unlikely(is_bad_inode(inode))) { 778 truncate_inode_pages_final(&inode->i_data); 779 clear_inode(inode); 780 nilfs_clear_inode(inode); 781 return; 782 } 783 nilfs_transaction_begin(sb, &ti, 0); /* never fails */ 784 785 truncate_inode_pages_final(&inode->i_data); 786 787 /* TODO: some of the following operations may fail. */ 788 nilfs_truncate_bmap(ii, 0); 789 nilfs_mark_inode_dirty(inode); 790 clear_inode(inode); 791 792 ret = nilfs_ifile_delete_inode(ii->i_root->ifile, inode->i_ino); 793 if (!ret) 794 atomic64_dec(&ii->i_root->inodes_count); 795 796 nilfs_clear_inode(inode); 797 798 if (IS_SYNC(inode)) 799 nilfs_set_transaction_flag(NILFS_TI_SYNC); 800 nilfs_transaction_commit(sb); 801 /* 802 * May construct a logical segment and may fail in sync mode. 803 * But delete_inode has no return value. 804 */ 805 } 806 807 int nilfs_setattr(struct dentry *dentry, struct iattr *iattr) 808 { 809 struct nilfs_transaction_info ti; 810 struct inode *inode = d_inode(dentry); 811 struct super_block *sb = inode->i_sb; 812 int err; 813 814 err = setattr_prepare(dentry, iattr); 815 if (err) 816 return err; 817 818 err = nilfs_transaction_begin(sb, &ti, 0); 819 if (unlikely(err)) 820 return err; 821 822 if ((iattr->ia_valid & ATTR_SIZE) && 823 iattr->ia_size != i_size_read(inode)) { 824 inode_dio_wait(inode); 825 truncate_setsize(inode, iattr->ia_size); 826 nilfs_truncate(inode); 827 } 828 829 setattr_copy(inode, iattr); 830 mark_inode_dirty(inode); 831 832 if (iattr->ia_valid & ATTR_MODE) { 833 err = nilfs_acl_chmod(inode); 834 if (unlikely(err)) 835 goto out_err; 836 } 837 838 return nilfs_transaction_commit(sb); 839 840 out_err: 841 nilfs_transaction_abort(sb); 842 return err; 843 } 844 845 int nilfs_permission(struct inode *inode, int mask) 846 { 847 struct nilfs_root *root = NILFS_I(inode)->i_root; 848 849 if ((mask & MAY_WRITE) && root && 850 root->cno != NILFS_CPTREE_CURRENT_CNO) 851 return -EROFS; /* snapshot is not writable */ 852 853 return generic_permission(inode, mask); 854 } 855 856 int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh) 857 { 858 struct the_nilfs *nilfs = inode->i_sb->s_fs_info; 859 struct nilfs_inode_info *ii = NILFS_I(inode); 860 int err; 861 862 spin_lock(&nilfs->ns_inode_lock); 863 if (ii->i_bh == NULL) { 864 spin_unlock(&nilfs->ns_inode_lock); 865 err = nilfs_ifile_get_inode_block(ii->i_root->ifile, 866 inode->i_ino, pbh); 867 if (unlikely(err)) 868 return err; 869 spin_lock(&nilfs->ns_inode_lock); 870 if (ii->i_bh == NULL) 871 ii->i_bh = *pbh; 872 else { 873 brelse(*pbh); 874 *pbh = ii->i_bh; 875 } 876 } else 877 *pbh = ii->i_bh; 878 879 get_bh(*pbh); 880 spin_unlock(&nilfs->ns_inode_lock); 881 return 0; 882 } 883 884 int nilfs_inode_dirty(struct inode *inode) 885 { 886 struct nilfs_inode_info *ii = NILFS_I(inode); 887 struct the_nilfs *nilfs = inode->i_sb->s_fs_info; 888 int ret = 0; 889 890 if (!list_empty(&ii->i_dirty)) { 891 spin_lock(&nilfs->ns_inode_lock); 892 ret = test_bit(NILFS_I_DIRTY, &ii->i_state) || 893 test_bit(NILFS_I_BUSY, &ii->i_state); 894 spin_unlock(&nilfs->ns_inode_lock); 895 } 896 return ret; 897 } 898 899 int nilfs_set_file_dirty(struct inode *inode, unsigned int nr_dirty) 900 { 901 struct nilfs_inode_info *ii = NILFS_I(inode); 902 struct the_nilfs *nilfs = inode->i_sb->s_fs_info; 903 904 atomic_add(nr_dirty, &nilfs->ns_ndirtyblks); 905 906 if (test_and_set_bit(NILFS_I_DIRTY, &ii->i_state)) 907 return 0; 908 909 spin_lock(&nilfs->ns_inode_lock); 910 if (!test_bit(NILFS_I_QUEUED, &ii->i_state) && 911 !test_bit(NILFS_I_BUSY, &ii->i_state)) { 912 /* 913 * Because this routine may race with nilfs_dispose_list(), 914 * we have to check NILFS_I_QUEUED here, too. 915 */ 916 if (list_empty(&ii->i_dirty) && igrab(inode) == NULL) { 917 /* 918 * This will happen when somebody is freeing 919 * this inode. 920 */ 921 nilfs_msg(inode->i_sb, KERN_WARNING, 922 "cannot set file dirty (ino=%lu): the file is being freed", 923 inode->i_ino); 924 spin_unlock(&nilfs->ns_inode_lock); 925 return -EINVAL; /* 926 * NILFS_I_DIRTY may remain for 927 * freeing inode. 928 */ 929 } 930 list_move_tail(&ii->i_dirty, &nilfs->ns_dirty_files); 931 set_bit(NILFS_I_QUEUED, &ii->i_state); 932 } 933 spin_unlock(&nilfs->ns_inode_lock); 934 return 0; 935 } 936 937 int __nilfs_mark_inode_dirty(struct inode *inode, int flags) 938 { 939 struct buffer_head *ibh; 940 int err; 941 942 err = nilfs_load_inode_block(inode, &ibh); 943 if (unlikely(err)) { 944 nilfs_msg(inode->i_sb, KERN_WARNING, 945 "cannot mark inode dirty (ino=%lu): error %d loading inode block", 946 inode->i_ino, err); 947 return err; 948 } 949 nilfs_update_inode(inode, ibh, flags); 950 mark_buffer_dirty(ibh); 951 nilfs_mdt_mark_dirty(NILFS_I(inode)->i_root->ifile); 952 brelse(ibh); 953 return 0; 954 } 955 956 /** 957 * nilfs_dirty_inode - reflect changes on given inode to an inode block. 958 * @inode: inode of the file to be registered. 959 * 960 * nilfs_dirty_inode() loads a inode block containing the specified 961 * @inode and copies data from a nilfs_inode to a corresponding inode 962 * entry in the inode block. This operation is excluded from the segment 963 * construction. This function can be called both as a single operation 964 * and as a part of indivisible file operations. 965 */ 966 void nilfs_dirty_inode(struct inode *inode, int flags) 967 { 968 struct nilfs_transaction_info ti; 969 struct nilfs_mdt_info *mdi = NILFS_MDT(inode); 970 971 if (is_bad_inode(inode)) { 972 nilfs_msg(inode->i_sb, KERN_WARNING, 973 "tried to mark bad_inode dirty. ignored."); 974 dump_stack(); 975 return; 976 } 977 if (mdi) { 978 nilfs_mdt_mark_dirty(inode); 979 return; 980 } 981 nilfs_transaction_begin(inode->i_sb, &ti, 0); 982 __nilfs_mark_inode_dirty(inode, flags); 983 nilfs_transaction_commit(inode->i_sb); /* never fails */ 984 } 985 986 int nilfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 987 __u64 start, __u64 len) 988 { 989 struct the_nilfs *nilfs = inode->i_sb->s_fs_info; 990 __u64 logical = 0, phys = 0, size = 0; 991 __u32 flags = 0; 992 loff_t isize; 993 sector_t blkoff, end_blkoff; 994 sector_t delalloc_blkoff; 995 unsigned long delalloc_blklen; 996 unsigned int blkbits = inode->i_blkbits; 997 int ret, n; 998 999 ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC); 1000 if (ret) 1001 return ret; 1002 1003 inode_lock(inode); 1004 1005 isize = i_size_read(inode); 1006 1007 blkoff = start >> blkbits; 1008 end_blkoff = (start + len - 1) >> blkbits; 1009 1010 delalloc_blklen = nilfs_find_uncommitted_extent(inode, blkoff, 1011 &delalloc_blkoff); 1012 1013 do { 1014 __u64 blkphy; 1015 unsigned int maxblocks; 1016 1017 if (delalloc_blklen && blkoff == delalloc_blkoff) { 1018 if (size) { 1019 /* End of the current extent */ 1020 ret = fiemap_fill_next_extent( 1021 fieinfo, logical, phys, size, flags); 1022 if (ret) 1023 break; 1024 } 1025 if (blkoff > end_blkoff) 1026 break; 1027 1028 flags = FIEMAP_EXTENT_MERGED | FIEMAP_EXTENT_DELALLOC; 1029 logical = blkoff << blkbits; 1030 phys = 0; 1031 size = delalloc_blklen << blkbits; 1032 1033 blkoff = delalloc_blkoff + delalloc_blklen; 1034 delalloc_blklen = nilfs_find_uncommitted_extent( 1035 inode, blkoff, &delalloc_blkoff); 1036 continue; 1037 } 1038 1039 /* 1040 * Limit the number of blocks that we look up so as 1041 * not to get into the next delayed allocation extent. 1042 */ 1043 maxblocks = INT_MAX; 1044 if (delalloc_blklen) 1045 maxblocks = min_t(sector_t, delalloc_blkoff - blkoff, 1046 maxblocks); 1047 blkphy = 0; 1048 1049 down_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 1050 n = nilfs_bmap_lookup_contig( 1051 NILFS_I(inode)->i_bmap, blkoff, &blkphy, maxblocks); 1052 up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); 1053 1054 if (n < 0) { 1055 int past_eof; 1056 1057 if (unlikely(n != -ENOENT)) 1058 break; /* error */ 1059 1060 /* HOLE */ 1061 blkoff++; 1062 past_eof = ((blkoff << blkbits) >= isize); 1063 1064 if (size) { 1065 /* End of the current extent */ 1066 1067 if (past_eof) 1068 flags |= FIEMAP_EXTENT_LAST; 1069 1070 ret = fiemap_fill_next_extent( 1071 fieinfo, logical, phys, size, flags); 1072 if (ret) 1073 break; 1074 size = 0; 1075 } 1076 if (blkoff > end_blkoff || past_eof) 1077 break; 1078 } else { 1079 if (size) { 1080 if (phys && blkphy << blkbits == phys + size) { 1081 /* The current extent goes on */ 1082 size += n << blkbits; 1083 } else { 1084 /* Terminate the current extent */ 1085 ret = fiemap_fill_next_extent( 1086 fieinfo, logical, phys, size, 1087 flags); 1088 if (ret || blkoff > end_blkoff) 1089 break; 1090 1091 /* Start another extent */ 1092 flags = FIEMAP_EXTENT_MERGED; 1093 logical = blkoff << blkbits; 1094 phys = blkphy << blkbits; 1095 size = n << blkbits; 1096 } 1097 } else { 1098 /* Start a new extent */ 1099 flags = FIEMAP_EXTENT_MERGED; 1100 logical = blkoff << blkbits; 1101 phys = blkphy << blkbits; 1102 size = n << blkbits; 1103 } 1104 blkoff += n; 1105 } 1106 cond_resched(); 1107 } while (true); 1108 1109 /* If ret is 1 then we just hit the end of the extent array */ 1110 if (ret == 1) 1111 ret = 0; 1112 1113 inode_unlock(inode); 1114 return ret; 1115 } 1116