Lines Matching refs:inode

41 static int ceph_set_ino_cb(struct inode *inode, void *data)  in ceph_set_ino_cb()  argument
43 ceph_inode(inode)->i_vino = *(struct ceph_vino *)data; in ceph_set_ino_cb()
44 inode->i_ino = ceph_vino_to_ino(*(struct ceph_vino *)data); in ceph_set_ino_cb()
48 struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino) in ceph_get_inode()
50 struct inode *inode; in ceph_get_inode() local
53 inode = iget5_locked(sb, t, ceph_ino_compare, ceph_set_ino_cb, &vino); in ceph_get_inode()
54 if (inode == NULL) in ceph_get_inode()
56 if (inode->i_state & I_NEW) { in ceph_get_inode()
58 inode, ceph_vinop(inode), (u64)inode->i_ino); in ceph_get_inode()
59 unlock_new_inode(inode); in ceph_get_inode()
62 dout("get_inode on %lu=%llx.%llx got %p\n", inode->i_ino, vino.ino, in ceph_get_inode()
63 vino.snap, inode); in ceph_get_inode()
64 return inode; in ceph_get_inode()
70 struct inode *ceph_get_snapdir(struct inode *parent) in ceph_get_snapdir()
76 struct inode *inode = ceph_get_inode(parent->i_sb, vino); in ceph_get_snapdir() local
77 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_get_snapdir()
80 if (IS_ERR(inode)) in ceph_get_snapdir()
81 return inode; in ceph_get_snapdir()
82 inode->i_mode = parent->i_mode; in ceph_get_snapdir()
83 inode->i_uid = parent->i_uid; in ceph_get_snapdir()
84 inode->i_gid = parent->i_gid; in ceph_get_snapdir()
85 inode->i_op = &ceph_snapdir_iops; in ceph_get_snapdir()
86 inode->i_fop = &ceph_snapdir_fops; in ceph_get_snapdir()
89 return inode; in ceph_get_snapdir()
240 static int ceph_fill_dirfrag(struct inode *inode, in ceph_fill_dirfrag() argument
243 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fill_dirfrag()
266 " (no ref)\n", ceph_vinop(inode), id); in ceph_fill_dirfrag()
272 " referral\n", ceph_vinop(inode), id); in ceph_fill_dirfrag()
286 ceph_vinop(inode), le32_to_cpu(dirinfo->frag)); in ceph_fill_dirfrag()
296 ceph_vinop(inode), frag->frag, frag->ndist); in ceph_fill_dirfrag()
303 static int ceph_fill_fragtree(struct inode *inode, in ceph_fill_fragtree() argument
307 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fill_fragtree()
335 dout("fill_fragtree %llx.%llx\n", ceph_vinop(inode)); in ceph_fill_fragtree()
376 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()
757 queue_trunc = ceph_fill_file_size(inode, issued, in fill_inode()
781 ceph_forget_all_cached_acls(inode); in fill_inode()
785 inode->i_mapping->a_ops = &ceph_aops; in fill_inode()
787 switch (inode->i_mode & S_IFMT) { in fill_inode()
792 init_special_inode(inode, inode->i_mode, inode->i_rdev); in fill_inode()
793 inode->i_op = &ceph_file_iops; in fill_inode()
796 inode->i_op = &ceph_file_iops; in fill_inode()
797 inode->i_fop = &ceph_file_fops; in fill_inode()
800 inode->i_op = &ceph_symlink_iops; in fill_inode()
808 if (WARN_ON(symlen != inode->i_size)) in fill_inode()
824 inode->i_op = &ceph_dir_iops; in fill_inode()
825 inode->i_fop = &ceph_dir_fops; in fill_inode()
838 ceph_vinop(inode), inode->i_mode); in fill_inode()
843 if (ceph_snap(inode) == CEPH_NOSNAP) { in fill_inode()
845 ceph_add_cap(inode, session, in fill_inode()
855 if (S_ISDIR(inode->i_mode) && in fill_inode()
860 dout(" marking %p complete (empty)\n", inode); in fill_inode()
868 dout(" %p got snap_caps %s\n", inode, in fill_inode()
876 ceph_vinop(inode)); in fill_inode()
893 ceph_fill_inline_data(inode, locked_page, in fill_inode()
901 ceph_queue_vmtruncate(inode); in fill_inode()
904 if (S_ISDIR(inode->i_mode)) in fill_inode()
905 ceph_fill_fragtree(inode, &info->fragtree, dirinfo); in fill_inode()
909 ceph_fill_dirfrag(inode, dirinfo); in fill_inode()
932 struct inode *dir; in update_dentry_lease()
978 static struct dentry *splice_dentry(struct dentry *dn, struct inode *in, in splice_dentry()
1030 struct inode *in = NULL; in ceph_fill_trace()
1080 struct inode *dir = req->r_locked_dir; in ceph_fill_trace()
1180 struct inode *dir = req->r_locked_dir; in ceph_fill_trace()
1205 struct inode *olddir = req->r_old_dentry_dir; in ceph_fill_trace()
1279 struct inode *dir = req->r_locked_dir; in ceph_fill_trace()
1311 struct inode *in; in readdir_prepopulate_inodes_only()
1343 struct inode *in; in ceph_readdir_prepopulate()
1345 struct inode *snapdir = NULL; in ceph_readdir_prepopulate()
1482 int ceph_inode_set_size(struct inode *inode, loff_t size) in ceph_inode_set_size() argument
1484 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_inode_set_size()
1488 dout("set_size %p %llu -> %llu\n", inode, inode->i_size, size); in ceph_inode_set_size()
1489 inode->i_size = size; in ceph_inode_set_size()
1490 inode->i_blocks = (size + (1 << 9) - 1) >> 9; in ceph_inode_set_size()
1505 void ceph_queue_writeback(struct inode *inode) in ceph_queue_writeback() argument
1507 ihold(inode); in ceph_queue_writeback()
1508 if (queue_work(ceph_inode_to_client(inode)->wb_wq, in ceph_queue_writeback()
1509 &ceph_inode(inode)->i_wb_work)) { in ceph_queue_writeback()
1510 dout("ceph_queue_writeback %p\n", inode); in ceph_queue_writeback()
1512 dout("ceph_queue_writeback %p failed\n", inode); in ceph_queue_writeback()
1513 iput(inode); in ceph_queue_writeback()
1521 struct inode *inode = &ci->vfs_inode; in ceph_writeback_work() local
1523 dout("writeback %p\n", inode); in ceph_writeback_work()
1524 filemap_fdatawrite(&inode->i_data); in ceph_writeback_work()
1525 iput(inode); in ceph_writeback_work()
1531 void ceph_queue_invalidate(struct inode *inode) in ceph_queue_invalidate() argument
1533 ihold(inode); in ceph_queue_invalidate()
1534 if (queue_work(ceph_inode_to_client(inode)->pg_inv_wq, in ceph_queue_invalidate()
1535 &ceph_inode(inode)->i_pg_inv_work)) { in ceph_queue_invalidate()
1536 dout("ceph_queue_invalidate %p\n", inode); in ceph_queue_invalidate()
1538 dout("ceph_queue_invalidate %p failed\n", inode); in ceph_queue_invalidate()
1539 iput(inode); in ceph_queue_invalidate()
1551 struct inode *inode = &ci->vfs_inode; in ceph_invalidate_work() local
1557 dout("invalidate_pages %p gen %d revoking %d\n", inode, in ceph_invalidate_work()
1569 truncate_pagecache(inode, 0); in ceph_invalidate_work()
1574 dout("invalidate_pages %p gen %d successful\n", inode, in ceph_invalidate_work()
1580 inode, orig_gen, ci->i_rdcache_gen, in ceph_invalidate_work()
1590 iput(inode); in ceph_invalidate_work()
1603 struct inode *inode = &ci->vfs_inode; in ceph_vmtruncate_work() local
1605 dout("vmtruncate_work %p\n", inode); in ceph_vmtruncate_work()
1606 __ceph_do_pending_vmtruncate(inode); in ceph_vmtruncate_work()
1607 iput(inode); in ceph_vmtruncate_work()
1614 void ceph_queue_vmtruncate(struct inode *inode) in ceph_queue_vmtruncate() argument
1616 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_queue_vmtruncate()
1618 ihold(inode); in ceph_queue_vmtruncate()
1620 if (queue_work(ceph_sb_to_client(inode->i_sb)->trunc_wq, in ceph_queue_vmtruncate()
1622 dout("ceph_queue_vmtruncate %p\n", inode); in ceph_queue_vmtruncate()
1625 inode, ci->i_truncate_pending); in ceph_queue_vmtruncate()
1626 iput(inode); in ceph_queue_vmtruncate()
1634 void __ceph_do_pending_vmtruncate(struct inode *inode) in __ceph_do_pending_vmtruncate() argument
1636 struct ceph_inode_info *ci = ceph_inode(inode); in __ceph_do_pending_vmtruncate()
1644 dout("__do_pending_vmtruncate %p none pending\n", inode); in __ceph_do_pending_vmtruncate()
1656 inode); in __ceph_do_pending_vmtruncate()
1658 filemap_write_and_wait_range(&inode->i_data, 0, in __ceph_do_pending_vmtruncate()
1659 inode->i_sb->s_maxbytes); in __ceph_do_pending_vmtruncate()
1668 dout("__do_pending_vmtruncate %p (%d) to %lld\n", inode, in __ceph_do_pending_vmtruncate()
1672 truncate_pagecache(inode, to); in __ceph_do_pending_vmtruncate()
1717 struct inode *inode = d_inode(dentry); in ceph_setattr() local
1718 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_setattr()
1728 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_setattr()
1731 err = inode_change_ok(inode, attr); in ceph_setattr()
1742 dout("setattr %p issued %s\n", inode, ceph_cap_string(issued)); in ceph_setattr()
1745 dout("setattr %p uid %d -> %d\n", inode, in ceph_setattr()
1746 from_kuid(&init_user_ns, inode->i_uid), in ceph_setattr()
1749 inode->i_uid = attr->ia_uid; in ceph_setattr()
1752 !uid_eq(attr->ia_uid, inode->i_uid)) { in ceph_setattr()
1760 dout("setattr %p gid %d -> %d\n", inode, in ceph_setattr()
1761 from_kgid(&init_user_ns, inode->i_gid), in ceph_setattr()
1764 inode->i_gid = attr->ia_gid; in ceph_setattr()
1767 !gid_eq(attr->ia_gid, inode->i_gid)) { in ceph_setattr()
1775 dout("setattr %p mode 0%o -> 0%o\n", inode, inode->i_mode, in ceph_setattr()
1778 inode->i_mode = attr->ia_mode; in ceph_setattr()
1781 attr->ia_mode != inode->i_mode) { in ceph_setattr()
1782 inode->i_mode = attr->ia_mode; in ceph_setattr()
1790 dout("setattr %p atime %ld.%ld -> %ld.%ld\n", inode, in ceph_setattr()
1791 inode->i_atime.tv_sec, inode->i_atime.tv_nsec, in ceph_setattr()
1795 inode->i_atime = attr->ia_atime; in ceph_setattr()
1798 timespec_compare(&inode->i_atime, in ceph_setattr()
1800 inode->i_atime = attr->ia_atime; in ceph_setattr()
1803 !timespec_equal(&inode->i_atime, &attr->ia_atime)) { in ceph_setattr()
1812 dout("setattr %p mtime %ld.%ld -> %ld.%ld\n", inode, in ceph_setattr()
1813 inode->i_mtime.tv_sec, inode->i_mtime.tv_nsec, in ceph_setattr()
1817 inode->i_mtime = attr->ia_mtime; in ceph_setattr()
1820 timespec_compare(&inode->i_mtime, in ceph_setattr()
1822 inode->i_mtime = attr->ia_mtime; in ceph_setattr()
1825 !timespec_equal(&inode->i_mtime, &attr->ia_mtime)) { in ceph_setattr()
1834 dout("setattr %p size %lld -> %lld\n", inode, in ceph_setattr()
1835 inode->i_size, attr->ia_size); in ceph_setattr()
1837 attr->ia_size > inode->i_size) { in ceph_setattr()
1838 inode->i_size = attr->ia_size; in ceph_setattr()
1839 inode->i_blocks = in ceph_setattr()
1841 inode->i_ctime = attr->ia_ctime; in ceph_setattr()
1845 attr->ia_size != inode->i_size) { in ceph_setattr()
1848 cpu_to_le64(inode->i_size); in ceph_setattr()
1859 dout("setattr %p ctime %ld.%ld -> %ld.%ld (%s)\n", inode, in ceph_setattr()
1860 inode->i_ctime.tv_sec, inode->i_ctime.tv_nsec, in ceph_setattr()
1863 inode->i_ctime = attr->ia_ctime; in ceph_setattr()
1881 dout("setattr %p ATTR_FILE ... hrm!\n", inode); in ceph_setattr()
1885 inode->i_ctime = CURRENT_TIME; in ceph_setattr()
1892 __mark_inode_dirty(inode, inode_dirty_flags); in ceph_setattr()
1895 err = posix_acl_chmod(inode, attr->ia_mode); in ceph_setattr()
1901 req->r_inode = inode; in ceph_setattr()
1902 ihold(inode); in ceph_setattr()
1908 dout("setattr %p result=%d (%s locally, %d remote)\n", inode, err, in ceph_setattr()
1913 __ceph_do_pending_vmtruncate(inode); in ceph_setattr()
1924 int __ceph_do_getattr(struct inode *inode, struct page *locked_page, in __ceph_do_getattr() argument
1927 struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); in __ceph_do_getattr()
1932 if (ceph_snap(inode) == CEPH_SNAPDIR) { in __ceph_do_getattr()
1933 dout("do_getattr inode %p SNAPDIR\n", inode); in __ceph_do_getattr()
1938 inode, ceph_cap_string(mask), inode->i_mode); in __ceph_do_getattr()
1939 if (!force && ceph_caps_issued_mask(ceph_inode(inode), mask, 1)) in __ceph_do_getattr()
1945 req->r_inode = inode; in __ceph_do_getattr()
1946 ihold(inode); in __ceph_do_getattr()
1972 int ceph_permission(struct inode *inode, int mask) in ceph_permission() argument
1979 err = ceph_do_getattr(inode, CEPH_CAP_AUTH_SHARED, false); in ceph_permission()
1982 err = generic_permission(inode, mask); in ceph_permission()
1993 struct inode *inode = d_inode(dentry); in ceph_getattr() local
1994 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_getattr()
1997 err = ceph_do_getattr(inode, CEPH_STAT_CAP_INODE_ALL, false); in ceph_getattr()
1999 generic_fillattr(inode, stat); in ceph_getattr()
2000 stat->ino = ceph_translate_ino(inode->i_sb, inode->i_ino); in ceph_getattr()
2001 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_getattr()
2002 stat->dev = ceph_snap(inode); in ceph_getattr()
2005 if (S_ISDIR(inode->i_mode)) { in ceph_getattr()
2006 if (ceph_test_mount_opt(ceph_sb_to_client(inode->i_sb), in ceph_getattr()