Lines Matching defs:inode

21 #include "inode.h"
51 struct bch_inode_info *inode,
57 BUG_ON(bi->bi_inum != inode->v.i_ino);
63 set_nlink(&inode->v, bch2_inode_nlink_get(bi));
64 i_uid_write(&inode->v, bi->bi_uid);
65 i_gid_write(&inode->v, bi->bi_gid);
66 inode->v.i_mode = bi->bi_mode;
69 inode_set_atime_to_ts(&inode->v, bch2_time_to_timespec(c, bi->bi_atime));
71 inode_set_mtime_to_ts(&inode->v, bch2_time_to_timespec(c, bi->bi_mtime));
73 inode_set_ctime_to_ts(&inode->v, bch2_time_to_timespec(c, bi->bi_ctime));
75 inode->ei_inode = *bi;
77 bch2_inode_flags_to_vfs(inode);
81 struct bch_inode_info *inode,
92 ret = bch2_inode_peek(trans, &iter, &inode_u, inode_inum(inode),
94 (set ? set(trans, inode, &inode_u, p) : 0) ?:
99 * the btree node lock protects inode->ei_inode, not ei_update_lock;
100 * this is important for inode updates via bchfs_write_index_update
103 bch2_inode_update_after_write(trans, inode, &inode_u, fields);
111 "%s: inode %u:%llu not found when updating",
113 inode_inum(inode).subvol,
114 inode_inum(inode).inum);
121 struct bch_inode_info *inode,
132 if (new_qid.q[i] == inode->ei_qid.q[i])
138 mutex_lock(&inode->ei_quota_lock);
141 inode->ei_qid,
142 inode->v.i_blocks +
143 inode->ei_quota_reserved,
148 inode->ei_qid.q[i] = new_qid.q[i];
150 mutex_unlock(&inode->ei_quota_lock);
155 static int bch2_iget5_test(struct inode *vinode, void *p)
157 struct bch_inode_info *inode = to_bch_ei(vinode);
160 return inode->ei_subvol == inum->subvol &&
161 inode->ei_inode.bi_inum == inum->inum;
164 static int bch2_iget5_set(struct inode *vinode, void *p)
166 struct bch_inode_info *inode = to_bch_ei(vinode);
169 inode->v.i_ino = inum->inum;
170 inode->ei_subvol = inum->subvol;
171 inode->ei_inode.bi_inum = inum->inum;
180 static struct bch_inode_info *bch2_inode_insert(struct bch_fs *c, struct bch_inode_info *inode)
182 subvol_inum inum = inode_inum(inode);
183 struct bch_inode_info *old = to_bch_ei(inode_insert5(&inode->v,
190 if (unlikely(old != inode)) {
191 __destroy_inode(&inode->v);
192 kmem_cache_free(bch2_inode_cache, inode);
193 inode = old;
196 list_add(&inode->ei_vfs_inode_list, &c->vfs_inodes_list);
202 unlock_new_inode(&inode->v);
205 return inode;
217 * Allocate a new inode, dropping/retaking btree locks if necessary:
223 struct bch_inode_info *inode =
227 if (unlikely(!inode)) {
228 int ret = drop_locks_do(trans, (inode = to_bch_ei(new_inode(c->vfs_sb))) ? 0 : -ENOMEM);
229 if (ret && inode) {
230 __destroy_inode(&inode->v);
231 kmem_cache_free(bch2_inode_cache, inode);
237 return inode;
240 struct inode *bch2_vfs_inode_get(struct bch_fs *c, subvol_inum inum)
242 struct bch_inode_info *inode =
247 if (inode)
248 return &inode->v;
257 PTR_ERR_OR_ZERO(inode = bch2_new_inode(trans));
259 bch2_vfs_inode_init(trans, inum, inode, &inode_u, &subvol);
260 inode = bch2_inode_insert(c, inode);
264 return ret ? ERR_PTR(ret) : &inode->v;
276 struct bch_inode_info *inode;
285 * preallocate acls + vfs inode before btree transaction, so that
293 inode = to_bch_ei(new_inode(c->vfs_sb));
294 if (unlikely(!inode)) {
295 inode = ERR_PTR(-ENOMEM);
343 bch2_vfs_inode_init(trans, inum, inode, &inode_u, &subvol);
345 set_cached_acl(&inode->v, ACL_TYPE_ACCESS, acl);
346 set_cached_acl(&inode->v, ACL_TYPE_DEFAULT, default_acl);
349 * we must insert the new inode into the inode cache before calling
351 * thread pulling the inode in and modifying it:
353 inode = bch2_inode_insert(c, inode);
358 return inode;
364 make_bad_inode(&inode->v);
365 iput(&inode->v);
366 inode = ERR_PTR(ret);
396 struct bch_inode_info *inode =
401 if (inode)
408 PTR_ERR_OR_ZERO(inode = bch2_new_inode(trans));
413 bch_err(c, "%s points to missing inode", buf.buf);
419 bch2_vfs_inode_init(trans, inum, inode, &inode_u, &subvol);
420 inode = bch2_inode_insert(c, inode);
423 return inode;
425 inode = ERR_PTR(ret);
429 static struct dentry *bch2_lookup(struct inode *vdir, struct dentry *dentry,
436 struct bch_inode_info *inode;
438 PTR_ERR_OR_ZERO(inode = bch2_lookup_trans(trans, inode_inum(dir),
440 if (IS_ERR(inode))
441 inode = NULL;
443 return d_splice_alias(&inode->v, dentry);
447 struct inode *vdir, struct dentry *dentry,
450 struct bch_inode_info *inode =
454 if (IS_ERR(inode))
455 return bch2_err_class(PTR_ERR(inode));
457 d_instantiate(dentry, &inode->v);
462 struct inode *vdir, struct dentry *dentry,
469 struct bch_inode_info *inode,
477 mutex_lock(&inode->ei_update_lock);
482 inode_inum(inode), &inode_u,
488 bch2_inode_update_after_write(trans, inode, &inode_u, ATTR_CTIME);
492 mutex_unlock(&inode->ei_update_lock);
496 static int bch2_link(struct dentry *old_dentry, struct inode *vdir,
501 struct bch_inode_info *inode = to_bch_ei(old_dentry->d_inode);
504 lockdep_assert_held(&inode->v.i_rwsem);
507 bch2_subvol_is_ro(c, inode->ei_subvol) ?:
508 __bch2_link(c, inode, dir, dentry);
512 ihold(&inode->v);
513 d_instantiate(dentry, &inode->v);
517 int __bch2_unlink(struct inode *vdir, struct dentry *dentry,
522 struct bch_inode_info *inode = to_bch_ei(dentry->d_inode);
527 bch2_lock_inodes(INODE_UPDATE_LOCK, dir, inode);
540 bch2_inode_update_after_write(trans, inode, &inode_u,
548 set_nlink(&inode->v, 0);
551 bch2_unlock_inodes(INODE_UPDATE_LOCK, dir, inode);
557 static int bch2_unlink(struct inode *vdir, struct dentry *dentry)
568 struct inode *vdir, struct dentry *dentry,
572 struct bch_inode_info *dir = to_bch_ei(vdir), *inode;
575 inode = __bch2_create(idmap, dir, dentry, S_IFLNK|S_IRWXUGO, 0,
577 if (IS_ERR(inode))
578 return bch2_err_class(PTR_ERR(inode));
580 inode_lock(&inode->v);
581 ret = page_symlink(&inode->v, symname, strlen(symname) + 1);
582 inode_unlock(&inode->v);
587 ret = filemap_write_and_wait_range(inode->v.i_mapping, 0, LLONG_MAX);
591 ret = __bch2_link(c, inode, dir, dentry);
595 d_instantiate(dentry, &inode->v);
598 iput(&inode->v);
603 struct inode *vdir, struct dentry *dentry, umode_t mode)
609 struct inode *src_vdir, struct dentry *src_dentry,
610 struct inode *dst_vdir, struct dentry *dst_dentry,
721 struct bch_inode_info *inode,
725 struct bch_fs *c = inode->v.i_sb->s_fs_info;
729 bi->bi_uid = from_kuid(i_user_ns(&inode->v), attr->ia_uid);
731 bi->bi_gid = from_kgid(i_user_ns(&inode->v), attr->ia_gid);
747 : inode->v.i_gid;
750 !capable_wrt_inode_uidgid(idmap, &inode->v, CAP_FSETID))
757 struct bch_inode_info *inode,
760 struct bch_fs *c = inode->v.i_sb->s_fs_info;
768 mutex_lock(&inode->ei_update_lock);
770 qid = inode->ei_qid;
773 qid.q[QTYP_USR] = from_kuid(i_user_ns(&inode->v), attr->ia_uid);
776 qid.q[QTYP_GRP] = from_kgid(i_user_ns(&inode->v), attr->ia_gid);
778 ret = bch2_fs_quota_transfer(c, inode, qid, ~0,
789 ret = bch2_inode_peek(trans, &inode_iter, &inode_u, inode_inum(inode),
794 bch2_setattr_copy(idmap, inode, &inode_u, attr);
797 ret = bch2_acl_chmod(trans, inode_inum(inode), &inode_u,
814 bch2_inode_update_after_write(trans, inode, &inode_u, attr->ia_valid);
817 set_cached_acl(&inode->v, ACL_TYPE_ACCESS, acl);
821 mutex_unlock(&inode->ei_update_lock);
830 struct bch_inode_info *inode = to_bch_ei(d_inode(path->dentry));
831 struct bch_fs *c = inode->v.i_sb->s_fs_info;
833 stat->dev = inode->v.i_sb->s_dev;
834 stat->ino = inode->v.i_ino;
835 stat->mode = inode->v.i_mode;
836 stat->nlink = inode->v.i_nlink;
837 stat->uid = inode->v.i_uid;
838 stat->gid = inode->v.i_gid;
839 stat->rdev = inode->v.i_rdev;
840 stat->size = i_size_read(&inode->v);
841 stat->atime = inode_get_atime(&inode->v);
842 stat->mtime = inode_get_mtime(&inode->v);
843 stat->ctime = inode_get_ctime(&inode->v);
845 stat->blocks = inode->v.i_blocks;
849 stat->btime = bch2_time_to_timespec(c, inode->ei_inode.bi_otime);
852 if (inode->ei_inode.bi_flags & BCH_INODE_immutable)
856 if (inode->ei_inode.bi_flags & BCH_INODE_append)
860 if (inode->ei_inode.bi_flags & BCH_INODE_nodump)
870 struct bch_inode_info *inode = to_bch_ei(dentry->d_inode);
871 struct bch_fs *c = inode->v.i_sb->s_fs_info;
874 lockdep_assert_held(&inode->v.i_rwsem);
876 ret = bch2_subvol_is_ro(c, inode->ei_subvol) ?:
882 ? bchfs_truncate(idmap, inode, iattr)
883 : bch2_setattr_nonsize(idmap, inode, iattr);
887 struct inode *vdir, struct file *file, umode_t mode)
889 struct bch_inode_info *inode =
894 if (IS_ERR(inode))
895 return bch2_err_class(PTR_ERR(inode));
897 d_mark_tmpfile(file, &inode->v);
898 d_instantiate(file->f_path.dentry, &inode->v);
958 static int bch2_fiemap(struct inode *vinode, struct fiemap_extent_info *info,
1022 bch2_cut_front(POS(k.k->p.inode,
1042 POS(iter.pos.inode, iter.pos.offset + sectors));
1086 struct bch_inode_info *inode = file_bch_inode(file);
1087 struct bch_fs *c = inode->v.i_sb->s_fs_info;
1092 int ret = bch2_readdir(c, inode_inum(inode), ctx);
1098 static int bch2_open(struct inode *vinode, struct file *file)
1101 struct bch_inode_info *inode = to_bch_ei(vinode);
1102 struct bch_fs *c = inode->v.i_sb->s_fs_info;
1104 int ret = bch2_subvol_is_ro(c, inode->ei_subvol);
1231 static struct bcachefs_fid bch2_inode_to_fid(struct bch_inode_info *inode)
1234 .inum = inode->ei_inode.bi_inum,
1235 .subvol = inode->ei_subvol,
1236 .gen = inode->ei_inode.bi_generation,
1240 static int bch2_encode_fh(struct inode *vinode, u32 *fh, int *len,
1241 struct inode *vdir)
1243 struct bch_inode_info *inode = to_bch_ei(vinode);
1247 if (!S_ISDIR(inode->v.i_mode) && dir) {
1256 fid->fid = bch2_inode_to_fid(inode);
1269 *fid = bch2_inode_to_fid(inode);
1276 static struct inode *bch2_nfs_get_inode(struct super_block *sb,
1280 struct inode *vinode = bch2_vfs_inode_get(c, (subvol_inum) {
1316 struct bch_inode_info *inode = to_bch_ei(child->d_inode);
1317 struct bch_fs *c = inode->v.i_sb->s_fs_info;
1319 .subvol = inode->ei_inode.bi_parent_subvol ?:
1320 inode->ei_subvol,
1321 .inum = inode->ei_inode.bi_dir,
1329 struct bch_inode_info *inode = to_bch_ei(child->d_inode);
1331 struct bch_fs *c = inode->v.i_sb->s_fs_info;
1363 ret = bch2_inode_find_by_inum_trans(trans, inode_inum(inode), &inode_u);
1387 if (target.subvol == inode->ei_subvol &&
1388 target.inum == inode->ei_inode.bi_inum)
1396 if (k.k->p.inode > dir->ei_inode.bi_inum)
1409 if (target.subvol == inode->ei_subvol &&
1410 target.inum == inode->ei_inode.bi_inum)
1443 struct bch_inode_info *inode,
1447 bch2_iget5_set(&inode->v, &inum);
1448 bch2_inode_update_after_write(trans, inode, bi, ~0);
1451 set_bit(EI_INODE_SNAPSHOT, &inode->ei_flags);
1453 clear_bit(EI_INODE_SNAPSHOT, &inode->ei_flags);
1455 inode->v.i_blocks = bi->bi_sectors;
1456 inode->v.i_ino = bi->bi_inum;
1457 inode->v.i_rdev = bi->bi_dev;
1458 inode->v.i_generation = bi->bi_generation;
1459 inode->v.i_size = bi->bi_size;
1461 inode->ei_flags = 0;
1462 inode->ei_quota_reserved = 0;
1463 inode->ei_qid = bch_qid(bi);
1464 inode->ei_subvol = inum.subvol;
1466 inode->v.i_mapping->a_ops = &bch_address_space_operations;
1468 switch (inode->v.i_mode & S_IFMT) {
1470 inode->v.i_op = &bch_file_inode_operations;
1471 inode->v.i_fop = &bch_file_operations;
1474 inode->v.i_op = &bch_dir_inode_operations;
1475 inode->v.i_fop = &bch_dir_file_operations;
1478 inode_nohighmem(&inode->v);
1479 inode->v.i_op = &bch_symlink_inode_operations;
1482 init_special_inode(&inode->v, inode->v.i_mode, inode->v.i_rdev);
1483 inode->v.i_op = &bch_special_inode_operations;
1487 mapping_set_large_folios(inode->v.i_mapping);
1490 static struct inode *bch2_alloc_inode(struct super_block *sb)
1492 struct bch_inode_info *inode;
1494 inode = kmem_cache_alloc(bch2_inode_cache, GFP_NOFS);
1495 if (!inode)
1498 inode_init_once(&inode->v);
1499 mutex_init(&inode->ei_update_lock);
1500 two_state_lock_init(&inode->ei_pagecache_lock);
1501 INIT_LIST_HEAD(&inode->ei_vfs_inode_list);
1502 mutex_init(&inode->ei_quota_lock);
1504 return &inode->v;
1509 struct inode *vinode = container_of(head, struct inode, i_rcu);
1510 struct bch_inode_info *inode = to_bch_ei(vinode);
1512 kmem_cache_free(bch2_inode_cache, inode);
1515 static void bch2_destroy_inode(struct inode *vinode)
1521 struct bch_inode_info *inode,
1525 struct bch_fs *c = inode->v.i_sb->s_fs_info;
1527 bi->bi_atime = timespec_to_bch2_time(c, inode_get_atime(&inode->v));
1528 bi->bi_mtime = timespec_to_bch2_time(c, inode_get_mtime(&inode->v));
1529 bi->bi_ctime = timespec_to_bch2_time(c, inode_get_ctime(&inode->v));
1534 static int bch2_vfs_write_inode(struct inode *vinode,
1538 struct bch_inode_info *inode = to_bch_ei(vinode);
1541 mutex_lock(&inode->ei_update_lock);
1542 ret = bch2_write_inode(c, inode, inode_update_times_fn, NULL,
1544 mutex_unlock(&inode->ei_update_lock);
1549 static void bch2_evict_inode(struct inode *vinode)
1552 struct bch_inode_info *inode = to_bch_ei(vinode);
1554 truncate_inode_pages_final(&inode->v.i_data);
1556 clear_inode(&inode->v);
1558 BUG_ON(!is_bad_inode(&inode->v) && inode->ei_quota_reserved);
1560 if (!inode->v.i_nlink && !is_bad_inode(&inode->v)) {
1561 bch2_quota_acct(c, inode->ei_qid, Q_SPC, -((s64) inode->v.i_blocks),
1563 bch2_quota_acct(c, inode->ei_qid, Q_INO, -1,
1565 bch2_inode_rm(c, inode_inum(inode));
1569 list_del_init(&inode->ei_vfs_inode_list);
1575 struct bch_inode_info *inode;
1594 list_for_each_entry(inode, &c->vfs_inodes_list, ei_vfs_inode_list) {
1595 if (!snapshot_list_has_id(s, inode->ei_subvol))
1598 if (!(inode->v.i_state & I_DONTCACHE) &&
1599 !(inode->v.i_state & I_FREEING) &&
1600 igrab(&inode->v)) {
1603 if (darray_push_gfp(&grabbed, inode, GFP_ATOMIC|__GFP_NOWARN)) {
1604 iput(&inode->v);
1608 wait_queue_head_t *wq = bit_waitqueue(&inode->v.i_state, __I_NEW);
1609 DEFINE_WAIT_BIT(wait, &inode->v.i_state, __I_NEW);
1622 inode = *i;
1623 d_mark_dontcache(&inode->v);
1624 d_prune_aliases(&inode->v);
1625 iput(&inode->v);
1870 struct inode *vinode;
1987 bch_err_msg(c, ret, "mounting: error getting root inode");