Lines Matching defs:inode

18 #include "inode.h"
56 struct bch_inode_info *inode,
64 dev = find_first_bit(inode->ei_devs_need_flush.d, BCH_SB_MEMBERS_MAX);
68 devs = inode->ei_devs_need_flush;
69 memset(&inode->ei_devs_need_flush, 0, sizeof(inode->ei_devs_need_flush));
94 struct bch_inode_info *inode)
99 bch2_inode_flush_nocow_writes_async(c, inode, &cl);
114 struct bch_inode_info *inode,
132 struct bch_inode_info *inode,
141 return bch2_write_inode(c, inode, inode_set_size, &s, fields);
144 void __bch2_i_sectors_acct(struct bch_fs *c, struct bch_inode_info *inode,
147 bch2_fs_inconsistent_on((s64) inode->v.i_blocks + sectors < 0, c,
148 "inode %lu i_blocks underflow: %llu + %lli < 0 (ondisk %lli)",
149 inode->v.i_ino, (u64) inode->v.i_blocks, sectors,
150 inode->ei_inode.bi_sectors);
151 inode->v.i_blocks += sectors;
155 !test_bit(EI_INODE_SNAPSHOT, &inode->ei_flags) &&
158 BUG_ON(sectors > inode->ei_quota_reserved);
161 inode->ei_quota_reserved -= sectors;
163 bch2_quota_acct(c, inode->ei_qid, Q_SPC, sectors, KEY_TYPE_QUOTA_WARN);
171 * inode->ei_inode.bi_journal_seq won't be up to date since it's set in an
172 * insert trigger: look up the btree inode instead
175 struct bch_inode_info *inode)
184 int ret = bch2_inode_find_by_inum(c, inode_inum(inode), &u) ?:
186 bch2_inode_flush_nocow_writes(c, inode);
193 struct bch_inode_info *inode = file_bch_inode(file);
194 struct bch_fs *c = inode->v.i_sb->s_fs_info;
200 ret = sync_inode_metadata(&inode->v, 1);
203 ret = bch2_flush_inode(c, inode);
240 static int __bch2_truncate_folio(struct bch_inode_info *inode,
243 struct bch_fs *c = inode->v.i_sb->s_fs_info;
244 struct address_space *mapping = inode->v.i_mapping;
260 ret = range_has_data(c, inode->ei_subvol,
261 POS(inode->v.i_ino, (index << PAGE_SECTORS_SHIFT)),
262 POS(inode->v.i_ino, (index << PAGE_SECTORS_SHIFT) + PAGE_SECTORS));
299 ret = bch2_folio_set(c, inode_inum(inode), &folio, 1);
312 bch2_i_sectors_acct(c, inode, NULL, i_sectors_delta);
324 WARN_ON_ONCE(folio_pos(folio) >= inode->v.i_size);
326 if (inode->v.i_size > folio_pos(folio))
327 end_pos = min_t(u64, inode->v.i_size, end_pos);
338 BUG_ON(bch2_get_folio_disk_reservation(c, inode, folio, false));
354 static int bch2_truncate_folio(struct bch_inode_info *inode, loff_t from)
356 return __bch2_truncate_folio(inode, from >> PAGE_SHIFT,
360 static int bch2_truncate_folios(struct bch_inode_info *inode,
363 int ret = __bch2_truncate_folio(inode, start >> PAGE_SHIFT,
368 ret = __bch2_truncate_folio(inode,
375 struct bch_inode_info *inode,
379 struct address_space *mapping = inode->v.i_mapping;
391 truncate_setsize(&inode->v, iattr->ia_size);
393 return bch2_setattr_nonsize(idmap, inode, iattr);
397 struct bch_inode_info *inode, struct iattr *iattr)
399 struct bch_fs *c = inode->v.i_sb->s_fs_info;
400 struct address_space *mapping = inode->v.i_mapping;
410 if (iattr->ia_size != inode->v.i_size) {
418 inode_dio_wait(&inode->v);
419 bch2_pagecache_block_get(inode);
421 ret = bch2_inode_find_by_inum(c, inode_inum(inode), &inode_u);
428 * before the inode).
434 WARN_ONCE(!test_bit(EI_INODE_ERROR, &inode->ei_flags) &&
435 inode->v.i_size < inode_u.bi_size,
437 (u64) inode->v.i_size, inode_u.bi_size);
439 if (iattr->ia_size > inode->v.i_size) {
440 ret = bch2_extend(idmap, inode, &inode_u, iattr);
446 ret = bch2_truncate_folio(inode, iattr->ia_size);
450 truncate_setsize(&inode->v, iattr->ia_size);
473 ret = bch2_truncate(c, inode_inum(inode), iattr->ia_size, &i_sectors_delta);
474 bch2_i_sectors_acct(c, inode, NULL, i_sectors_delta);
480 set_bit(EI_INODE_ERROR, &inode->ei_flags);
484 bch2_fs_inconsistent_on(!inode->v.i_size && inode->v.i_blocks &&
486 "inode %lu truncated to 0 but i_blocks %llu (ondisk %lli)",
487 inode->v.i_ino, (u64) inode->v.i_blocks,
488 inode->ei_inode.bi_sectors);
490 ret = bch2_setattr_nonsize(idmap, inode, iattr);
492 bch2_pagecache_block_put(inode);
499 struct bch_inode_info *inode,
502 struct bch_fs *c = inode->v.i_sb->s_fs_info;
508 static long bchfs_fpunch(struct bch_inode_info *inode, loff_t offset, loff_t len)
510 struct bch_fs *c = inode->v.i_sb->s_fs_info;
517 ret = bch2_truncate_folios(inode, offset, end);
523 truncate_pagecache_range(&inode->v, offset, end - 1);
528 ret = bch2_fpunch(c, inode_inum(inode),
531 bch2_i_sectors_acct(c, inode, NULL, i_sectors_delta);
534 mutex_lock(&inode->ei_update_lock);
535 if (end >= inode->v.i_size && !truncated_last_page) {
536 ret = bch2_write_inode_size(c, inode, inode->v.i_size,
539 ret = bch2_write_inode(c, inode, inode_update_times_fn, NULL,
542 mutex_unlock(&inode->ei_update_lock);
547 static long bchfs_fcollapse_finsert(struct bch_inode_info *inode,
551 struct bch_fs *c = inode->v.i_sb->s_fs_info;
552 struct address_space *mapping = inode->v.i_mapping;
560 if (offset >= inode->v.i_size)
563 if (offset + len >= inode->v.i_size)
572 i_size_write(&inode->v, inode->v.i_size + len);
574 ret = bch2_fcollapse_finsert(c, inode_inum(inode), offset >> 9, len >> 9,
577 i_size_write(&inode->v, inode->v.i_size - len);
578 bch2_i_sectors_acct(c, inode, NULL, i_sectors_delta);
583 static int __bchfs_fallocate(struct bch_inode_info *inode, int mode,
586 struct bch_fs *c = inode->v.i_sb->s_fs_info;
589 struct bpos end_pos = POS(inode->v.i_ino, end_sector);
593 bch2_inode_opts_get(&opts, c, &inode->ei_inode);
596 POS(inode->v.i_ino, start_sector),
611 inode->ei_subvol, &snapshot);
643 if (bch2_clamp_data_hole(&inode->v,
648 (bch2_clamp_data_hole(&inode->v,
652 bch2_btree_iter_set_pos(&iter, POS(iter.pos.inode, hole_start));
664 ret = bch2_quota_reservation_add(c, inode,
670 ret = bch2_extent_fallocate(trans, inode_inum(inode), &iter,
676 bch2_i_sectors_acct(c, inode, &quota_res, i_sectors_delta);
678 if (bch2_mark_pagecache_reserved(inode, &hole_start,
681 bch2_mark_pagecache_reserved(inode, &hole_start,
684 bch2_quota_reservation_put(c, inode, &quota_res);
693 bch2_fpunch_at(trans, &iter, inode_inum(inode),
695 bch2_i_sectors_acct(c, inode, &quota_res, i_sectors_delta);
696 bch2_quota_reservation_put(c, inode, &quota_res);
704 static long bchfs_fallocate(struct bch_inode_info *inode, int mode,
707 struct bch_fs *c = inode->v.i_sb->s_fs_info;
714 if (!(mode & FALLOC_FL_KEEP_SIZE) && end > inode->v.i_size) {
715 ret = inode_newsize_ok(&inode->v, end);
721 ret = bch2_truncate_folios(inode, offset, end);
727 truncate_pagecache_range(&inode->v, offset, end - 1);
733 ret = __bchfs_fallocate(inode, mode, block_start >> 9, block_end >> 9);
736 * On -ENOSPC in ZERO_RANGE mode, we still want to do the inode update,
743 if (mode & FALLOC_FL_KEEP_SIZE && end > inode->v.i_size)
744 end = inode->v.i_size;
746 if (end >= inode->v.i_size &&
749 spin_lock(&inode->v.i_lock);
750 i_size_write(&inode->v, end);
751 spin_unlock(&inode->v.i_lock);
753 mutex_lock(&inode->ei_update_lock);
754 ret2 = bch2_write_inode_size(c, inode, end, 0);
755 mutex_unlock(&inode->ei_update_lock);
764 struct bch_inode_info *inode = file_bch_inode(file);
765 struct bch_fs *c = inode->v.i_sb->s_fs_info;
771 inode_lock(&inode->v);
772 inode_dio_wait(&inode->v);
773 bch2_pagecache_block_get(inode);
780 ret = bchfs_fallocate(inode, mode, offset, len);
782 ret = bchfs_fpunch(inode, offset, len);
784 ret = bchfs_fcollapse_finsert(inode, offset, len, true);
786 ret = bchfs_fcollapse_finsert(inode, offset, len, false);
790 bch2_pagecache_block_put(inode);
791 inode_unlock(&inode->v);
801 static int quota_reserve_range(struct bch_inode_info *inode,
805 struct bch_fs *c = inode->v.i_sb->s_fs_info;
816 ret = bch2_subvolume_get_snapshot(trans, inode->ei_subvol, &snapshot);
821 SPOS(inode->v.i_ino, pos, snapshot), 0);
824 (k = bch2_btree_iter_peek_upto(&iter, POS(inode->v.i_ino, end - 1))).k &&
842 return ret ?: bch2_quota_reservation_add(c, inode, res, sectors, true);
935 struct bch_inode_info *inode = file_bch_inode(file);
936 struct bch_fs *c = inode->v.i_sb->s_fs_info;
940 subvol_inum inum = inode_inum(inode);
945 isize = i_size_read(&inode->v);
958 SPOS(inode->v.i_ino, offset >> 9, snapshot),
959 POS(inode->v.i_ino, U64_MAX),
977 next_data = bch2_seek_pagecache_data(&inode->v,
988 struct bch_inode_info *inode = file_bch_inode(file);
989 struct bch_fs *c = inode->v.i_sb->s_fs_info;
993 subvol_inum inum = inode_inum(inode);
998 isize = i_size_read(&inode->v);
1011 SPOS(inode->v.i_ino, offset >> 9, snapshot),
1013 if (k.k->p.inode != inode->v.i_ino) {
1014 next_hole = bch2_seek_pagecache_hole(&inode->v,
1018 next_hole = bch2_seek_pagecache_hole(&inode->v,