Lines Matching refs:inode
40 static int ceph_set_ino_cb(struct inode *inode, void *data) in ceph_set_ino_cb() argument
42 ceph_inode(inode)->i_vino = *(struct ceph_vino *)data; in ceph_set_ino_cb()
43 inode->i_ino = ceph_vino_to_ino(*(struct ceph_vino *)data); in ceph_set_ino_cb()
47 struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino) in ceph_get_inode()
49 struct inode *inode; in ceph_get_inode() local
52 inode = iget5_locked(sb, t, ceph_ino_compare, ceph_set_ino_cb, &vino); in ceph_get_inode()
53 if (inode == NULL) in ceph_get_inode()
55 if (inode->i_state & I_NEW) { in ceph_get_inode()
57 inode, ceph_vinop(inode), (u64)inode->i_ino); in ceph_get_inode()
58 unlock_new_inode(inode); in ceph_get_inode()
61 dout("get_inode on %lu=%llx.%llx got %p\n", inode->i_ino, vino.ino, in ceph_get_inode()
62 vino.snap, inode); in ceph_get_inode()
63 return inode; in ceph_get_inode()
69 struct inode *ceph_get_snapdir(struct inode *parent) in ceph_get_snapdir()
75 struct inode *inode = ceph_get_inode(parent->i_sb, vino); in ceph_get_snapdir() local
76 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_get_snapdir()
79 if (IS_ERR(inode)) in ceph_get_snapdir()
80 return inode; in ceph_get_snapdir()
81 inode->i_mode = parent->i_mode; in ceph_get_snapdir()
82 inode->i_uid = parent->i_uid; in ceph_get_snapdir()
83 inode->i_gid = parent->i_gid; in ceph_get_snapdir()
84 inode->i_op = &ceph_snapdir_iops; in ceph_get_snapdir()
85 inode->i_fop = &ceph_snapdir_fops; in ceph_get_snapdir()
88 return inode; in ceph_get_snapdir()
239 static int ceph_fill_dirfrag(struct inode *inode, in ceph_fill_dirfrag() argument
242 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fill_dirfrag()
265 " (no ref)\n", ceph_vinop(inode), id); in ceph_fill_dirfrag()
271 " referral\n", ceph_vinop(inode), id); in ceph_fill_dirfrag()
285 ceph_vinop(inode), le32_to_cpu(dirinfo->frag)); in ceph_fill_dirfrag()
295 ceph_vinop(inode), frag->frag, frag->ndist); in ceph_fill_dirfrag()
302 static int ceph_fill_fragtree(struct inode *inode, in ceph_fill_fragtree() argument
306 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fill_fragtree()
334 dout("fill_fragtree %llx.%llx\n", ceph_vinop(inode)); in ceph_fill_fragtree()
375 struct inode *ceph_alloc_inode(struct super_block *sb) in ceph_alloc_inode()
474 struct inode *inode = container_of(head, struct inode, i_rcu); in ceph_i_callback() local
475 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_i_callback()
480 void ceph_destroy_inode(struct inode *inode) in ceph_destroy_inode() argument
482 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_destroy_inode()
486 dout("destroy_inode %p ino %llx.%llx\n", inode, ceph_vinop(inode)); in ceph_destroy_inode()
490 ceph_queue_caps_release(inode); in ceph_destroy_inode()
521 call_rcu(&inode->i_rcu, ceph_i_callback); in ceph_destroy_inode()
524 int ceph_drop_inode(struct inode *inode) in ceph_drop_inode() argument
542 int ceph_fill_file_size(struct inode *inode, int issued, in ceph_fill_file_size() argument
545 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fill_file_size()
549 (truncate_seq == ci->i_truncate_seq && size > inode->i_size)) { in ceph_fill_file_size()
550 dout("size %lld -> %llu\n", inode->i_size, size); in ceph_fill_file_size()
551 inode->i_size = size; in ceph_fill_file_size()
552 inode->i_blocks = (size + (1<<9) - 1) >> 9; in ceph_fill_file_size()
572 mapping_mapped(inode->i_mapping) || in ceph_fill_file_size()
587 ceph_fscache_invalidate(inode); in ceph_fill_file_size()
592 void ceph_fill_file_time(struct inode *inode, int issued, in ceph_fill_file_time() argument
596 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fill_file_time()
604 if (timespec_compare(ctime, &inode->i_ctime) > 0) { in ceph_fill_file_time()
606 inode->i_ctime.tv_sec, inode->i_ctime.tv_nsec, in ceph_fill_file_time()
608 inode->i_ctime = *ctime; in ceph_fill_file_time()
614 inode->i_mtime.tv_sec, inode->i_mtime.tv_nsec, in ceph_fill_file_time()
618 inode->i_mtime = *mtime; in ceph_fill_file_time()
619 inode->i_atime = *atime; in ceph_fill_file_time()
623 if (timespec_compare(mtime, &inode->i_mtime) > 0) { in ceph_fill_file_time()
625 inode->i_mtime.tv_sec, in ceph_fill_file_time()
626 inode->i_mtime.tv_nsec, in ceph_fill_file_time()
628 inode->i_mtime = *mtime; in ceph_fill_file_time()
630 if (timespec_compare(atime, &inode->i_atime) > 0) { in ceph_fill_file_time()
632 inode->i_atime.tv_sec, in ceph_fill_file_time()
633 inode->i_atime.tv_nsec, in ceph_fill_file_time()
635 inode->i_atime = *atime; in ceph_fill_file_time()
645 inode->i_ctime = *ctime; in ceph_fill_file_time()
646 inode->i_mtime = *mtime; in ceph_fill_file_time()
647 inode->i_atime = *atime; in ceph_fill_file_time()
655 inode, time_warp_seq, ci->i_time_warp_seq); in ceph_fill_file_time()
662 static int fill_inode(struct inode *inode, struct page *locked_page, in fill_inode() argument
669 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; in fill_inode()
671 struct ceph_inode_info *ci = ceph_inode(inode); in fill_inode()
683 inode, ceph_vinop(inode), le64_to_cpu(info->version), in fill_inode()
687 if (info->cap.caps && ceph_snap(inode) == CEPH_NOSNAP) in fill_inode()
726 inode->i_version++; in fill_inode()
727 inode->i_rdev = le32_to_cpu(info->rdev); in fill_inode()
728 inode->i_blkbits = fls(le32_to_cpu(info->layout.fl_stripe_unit)) - 1; in fill_inode()
732 inode->i_mode = le32_to_cpu(info->mode); in fill_inode()
733 inode->i_uid = make_kuid(&init_user_ns, le32_to_cpu(info->uid)); in fill_inode()
734 inode->i_gid = make_kgid(&init_user_ns, le32_to_cpu(info->gid)); in fill_inode()
735 dout("%p mode 0%o uid.gid %d.%d\n", inode, inode->i_mode, in fill_inode()
736 from_kuid(&init_user_ns, inode->i_uid), in fill_inode()
737 from_kgid(&init_user_ns, inode->i_gid)); in fill_inode()
742 set_nlink(inode, le32_to_cpu(info->nlink)); in fill_inode()
749 ceph_fill_file_time(inode, issued, in fill_inode()
760 queue_trunc = ceph_fill_file_size(inode, issued, in fill_inode()
784 ceph_forget_all_cached_acls(inode); in fill_inode()
788 inode->i_mapping->a_ops = &ceph_aops; in fill_inode()
790 switch (inode->i_mode & S_IFMT) { in fill_inode()
795 init_special_inode(inode, inode->i_mode, inode->i_rdev); in fill_inode()
796 inode->i_op = &ceph_file_iops; in fill_inode()
799 inode->i_op = &ceph_file_iops; in fill_inode()
800 inode->i_fop = &ceph_file_fops; in fill_inode()
803 inode->i_op = &ceph_symlink_iops; in fill_inode()
811 if (WARN_ON(symlen != inode->i_size)) in fill_inode()
825 inode->i_link = ci->i_symlink; in fill_inode()
828 inode->i_op = &ceph_dir_iops; in fill_inode()
829 inode->i_fop = &ceph_dir_fops; in fill_inode()
842 ceph_vinop(inode), inode->i_mode); in fill_inode()
847 if (ceph_snap(inode) == CEPH_NOSNAP) { in fill_inode()
849 ceph_add_cap(inode, session, in fill_inode()
859 if (S_ISDIR(inode->i_mode) && in fill_inode()
864 dout(" marking %p complete (empty)\n", inode); in fill_inode()
865 i_size_write(inode, 0); in fill_inode()
873 dout(" %p got snap_caps %s\n", inode, in fill_inode()
881 ceph_vinop(inode)); in fill_inode()
898 ceph_fill_inline_data(inode, locked_page, in fill_inode()
906 ceph_queue_vmtruncate(inode); in fill_inode()
909 if (S_ISDIR(inode->i_mode)) in fill_inode()
910 ceph_fill_fragtree(inode, &info->fragtree, dirinfo); in fill_inode()
914 ceph_fill_dirfrag(inode, dirinfo); in fill_inode()
937 struct inode *dir; in update_dentry_lease()
983 static struct dentry *splice_dentry(struct dentry *dn, struct inode *in, in splice_dentry()
1035 struct inode *in = NULL; in ceph_fill_trace()
1085 struct inode *dir = req->r_locked_dir; in ceph_fill_trace()
1185 struct inode *dir = req->r_locked_dir; in ceph_fill_trace()
1210 struct inode *olddir = req->r_old_dentry_dir; in ceph_fill_trace()
1284 struct inode *dir = req->r_locked_dir; in ceph_fill_trace()
1316 struct inode *in; in readdir_prepopulate_inodes_only()
1350 static int fill_readdir_cache(struct inode *dir, struct dentry *dn, in fill_readdir_cache()
1391 struct inode *in; in ceph_readdir_prepopulate()
1393 struct inode *snapdir = NULL; in ceph_readdir_prepopulate()
1545 int ceph_inode_set_size(struct inode *inode, loff_t size) in ceph_inode_set_size() argument
1547 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_inode_set_size()
1551 dout("set_size %p %llu -> %llu\n", inode, inode->i_size, size); in ceph_inode_set_size()
1552 inode->i_size = size; in ceph_inode_set_size()
1553 inode->i_blocks = (size + (1 << 9) - 1) >> 9; in ceph_inode_set_size()
1568 void ceph_queue_writeback(struct inode *inode) in ceph_queue_writeback() argument
1570 ihold(inode); in ceph_queue_writeback()
1571 if (queue_work(ceph_inode_to_client(inode)->wb_wq, in ceph_queue_writeback()
1572 &ceph_inode(inode)->i_wb_work)) { in ceph_queue_writeback()
1573 dout("ceph_queue_writeback %p\n", inode); in ceph_queue_writeback()
1575 dout("ceph_queue_writeback %p failed\n", inode); in ceph_queue_writeback()
1576 iput(inode); in ceph_queue_writeback()
1584 struct inode *inode = &ci->vfs_inode; in ceph_writeback_work() local
1586 dout("writeback %p\n", inode); in ceph_writeback_work()
1587 filemap_fdatawrite(&inode->i_data); in ceph_writeback_work()
1588 iput(inode); in ceph_writeback_work()
1594 void ceph_queue_invalidate(struct inode *inode) in ceph_queue_invalidate() argument
1596 ihold(inode); in ceph_queue_invalidate()
1597 if (queue_work(ceph_inode_to_client(inode)->pg_inv_wq, in ceph_queue_invalidate()
1598 &ceph_inode(inode)->i_pg_inv_work)) { in ceph_queue_invalidate()
1599 dout("ceph_queue_invalidate %p\n", inode); in ceph_queue_invalidate()
1601 dout("ceph_queue_invalidate %p failed\n", inode); in ceph_queue_invalidate()
1602 iput(inode); in ceph_queue_invalidate()
1614 struct inode *inode = &ci->vfs_inode; in ceph_invalidate_work() local
1620 dout("invalidate_pages %p gen %d revoking %d\n", inode, in ceph_invalidate_work()
1632 truncate_pagecache(inode, 0); in ceph_invalidate_work()
1637 dout("invalidate_pages %p gen %d successful\n", inode, in ceph_invalidate_work()
1643 inode, orig_gen, ci->i_rdcache_gen, in ceph_invalidate_work()
1653 iput(inode); in ceph_invalidate_work()
1666 struct inode *inode = &ci->vfs_inode; in ceph_vmtruncate_work() local
1668 dout("vmtruncate_work %p\n", inode); in ceph_vmtruncate_work()
1669 __ceph_do_pending_vmtruncate(inode); in ceph_vmtruncate_work()
1670 iput(inode); in ceph_vmtruncate_work()
1677 void ceph_queue_vmtruncate(struct inode *inode) in ceph_queue_vmtruncate() argument
1679 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_queue_vmtruncate()
1681 ihold(inode); in ceph_queue_vmtruncate()
1683 if (queue_work(ceph_sb_to_client(inode->i_sb)->trunc_wq, in ceph_queue_vmtruncate()
1685 dout("ceph_queue_vmtruncate %p\n", inode); in ceph_queue_vmtruncate()
1688 inode, ci->i_truncate_pending); in ceph_queue_vmtruncate()
1689 iput(inode); in ceph_queue_vmtruncate()
1697 void __ceph_do_pending_vmtruncate(struct inode *inode) in __ceph_do_pending_vmtruncate() argument
1699 struct ceph_inode_info *ci = ceph_inode(inode); in __ceph_do_pending_vmtruncate()
1707 dout("__do_pending_vmtruncate %p none pending\n", inode); in __ceph_do_pending_vmtruncate()
1719 inode); in __ceph_do_pending_vmtruncate()
1721 filemap_write_and_wait_range(&inode->i_data, 0, in __ceph_do_pending_vmtruncate()
1722 inode->i_sb->s_maxbytes); in __ceph_do_pending_vmtruncate()
1731 dout("__do_pending_vmtruncate %p (%d) to %lld\n", inode, in __ceph_do_pending_vmtruncate()
1735 truncate_pagecache(inode, to); in __ceph_do_pending_vmtruncate()
1773 struct inode *inode = d_inode(dentry); in ceph_setattr() local
1774 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_setattr()
1786 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_setattr()
1789 err = inode_change_ok(inode, attr); in ceph_setattr()
1818 dout("setattr %p issued %s\n", inode, ceph_cap_string(issued)); in ceph_setattr()
1821 dout("setattr %p uid %d -> %d\n", inode, in ceph_setattr()
1822 from_kuid(&init_user_ns, inode->i_uid), in ceph_setattr()
1825 inode->i_uid = attr->ia_uid; in ceph_setattr()
1828 !uid_eq(attr->ia_uid, inode->i_uid)) { in ceph_setattr()
1836 dout("setattr %p gid %d -> %d\n", inode, in ceph_setattr()
1837 from_kgid(&init_user_ns, inode->i_gid), in ceph_setattr()
1840 inode->i_gid = attr->ia_gid; in ceph_setattr()
1843 !gid_eq(attr->ia_gid, inode->i_gid)) { in ceph_setattr()
1851 dout("setattr %p mode 0%o -> 0%o\n", inode, inode->i_mode, in ceph_setattr()
1854 inode->i_mode = attr->ia_mode; in ceph_setattr()
1857 attr->ia_mode != inode->i_mode) { in ceph_setattr()
1858 inode->i_mode = attr->ia_mode; in ceph_setattr()
1866 dout("setattr %p atime %ld.%ld -> %ld.%ld\n", inode, in ceph_setattr()
1867 inode->i_atime.tv_sec, inode->i_atime.tv_nsec, in ceph_setattr()
1871 inode->i_atime = attr->ia_atime; in ceph_setattr()
1874 timespec_compare(&inode->i_atime, in ceph_setattr()
1876 inode->i_atime = attr->ia_atime; in ceph_setattr()
1879 !timespec_equal(&inode->i_atime, &attr->ia_atime)) { in ceph_setattr()
1888 dout("setattr %p mtime %ld.%ld -> %ld.%ld\n", inode, in ceph_setattr()
1889 inode->i_mtime.tv_sec, inode->i_mtime.tv_nsec, in ceph_setattr()
1893 inode->i_mtime = attr->ia_mtime; in ceph_setattr()
1896 timespec_compare(&inode->i_mtime, in ceph_setattr()
1898 inode->i_mtime = attr->ia_mtime; in ceph_setattr()
1901 !timespec_equal(&inode->i_mtime, &attr->ia_mtime)) { in ceph_setattr()
1910 dout("setattr %p size %lld -> %lld\n", inode, in ceph_setattr()
1911 inode->i_size, attr->ia_size); in ceph_setattr()
1913 attr->ia_size > inode->i_size) { in ceph_setattr()
1914 inode->i_size = attr->ia_size; in ceph_setattr()
1915 inode->i_blocks = in ceph_setattr()
1917 inode->i_ctime = attr->ia_ctime; in ceph_setattr()
1921 attr->ia_size != inode->i_size) { in ceph_setattr()
1924 cpu_to_le64(inode->i_size); in ceph_setattr()
1935 dout("setattr %p ctime %ld.%ld -> %ld.%ld (%s)\n", inode, in ceph_setattr()
1936 inode->i_ctime.tv_sec, inode->i_ctime.tv_nsec, in ceph_setattr()
1939 inode->i_ctime = attr->ia_ctime; in ceph_setattr()
1957 dout("setattr %p ATTR_FILE ... hrm!\n", inode); in ceph_setattr()
1962 inode->i_ctime = CURRENT_TIME; in ceph_setattr()
1971 __mark_inode_dirty(inode, inode_dirty_flags); in ceph_setattr()
1974 err = posix_acl_chmod(inode, attr->ia_mode); in ceph_setattr()
1980 req->r_inode = inode; in ceph_setattr()
1981 ihold(inode); in ceph_setattr()
1987 dout("setattr %p result=%d (%s locally, %d remote)\n", inode, err, in ceph_setattr()
1992 __ceph_do_pending_vmtruncate(inode); in ceph_setattr()
2005 int __ceph_do_getattr(struct inode *inode, struct page *locked_page, in __ceph_do_getattr() argument
2008 struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); in __ceph_do_getattr()
2013 if (ceph_snap(inode) == CEPH_SNAPDIR) { in __ceph_do_getattr()
2014 dout("do_getattr inode %p SNAPDIR\n", inode); in __ceph_do_getattr()
2019 inode, ceph_cap_string(mask), inode->i_mode); in __ceph_do_getattr()
2020 if (!force && ceph_caps_issued_mask(ceph_inode(inode), mask, 1)) in __ceph_do_getattr()
2026 req->r_inode = inode; in __ceph_do_getattr()
2027 ihold(inode); in __ceph_do_getattr()
2053 int ceph_permission(struct inode *inode, int mask) in ceph_permission() argument
2060 err = ceph_do_getattr(inode, CEPH_CAP_AUTH_SHARED, false); in ceph_permission()
2063 err = generic_permission(inode, mask); in ceph_permission()
2074 struct inode *inode = d_inode(dentry); in ceph_getattr() local
2075 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_getattr()
2078 err = ceph_do_getattr(inode, CEPH_STAT_CAP_INODE_ALL, false); in ceph_getattr()
2080 generic_fillattr(inode, stat); in ceph_getattr()
2081 stat->ino = ceph_translate_ino(inode->i_sb, inode->i_ino); in ceph_getattr()
2082 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_getattr()
2083 stat->dev = ceph_snap(inode); in ceph_getattr()
2086 if (S_ISDIR(inode->i_mode)) { in ceph_getattr()
2087 if (ceph_test_mount_opt(ceph_sb_to_client(inode->i_sb), in ceph_getattr()