Lines Matching refs:inode

17 static bool fuse_use_readdirplus(struct inode *dir, struct dir_context *ctx)  in fuse_use_readdirplus()
33 static void fuse_advise_use_readdirplus(struct inode *dir) in fuse_advise_use_readdirplus()
110 void fuse_invalidate_attr(struct inode *inode) in fuse_invalidate_attr() argument
112 get_fuse_inode(inode)->i_time = 0; in fuse_invalidate_attr()
119 void fuse_invalidate_atime(struct inode *inode) in fuse_invalidate_atime() argument
121 if (!IS_RDONLY(inode)) in fuse_invalidate_atime()
122 fuse_invalidate_attr(inode); in fuse_invalidate_atime()
189 struct inode *inode; in fuse_dentry_revalidate() local
195 inode = d_inode_rcu(entry); in fuse_dentry_revalidate()
196 if (inode && is_bad_inode(inode)) in fuse_dentry_revalidate()
206 if (!inode) in fuse_dentry_revalidate()
213 fc = get_fuse_conn(inode); in fuse_dentry_revalidate()
231 fi = get_fuse_inode(inode); in fuse_dentry_revalidate()
232 if (outarg.nodeid != get_node_id(inode)) { in fuse_dentry_revalidate()
243 if (ret || (outarg.attr.mode ^ inode->i_mode) & S_IFMT) in fuse_dentry_revalidate()
246 fuse_change_attributes(inode, &outarg.attr, in fuse_dentry_revalidate()
250 } else if (inode) { in fuse_dentry_revalidate()
251 fi = get_fuse_inode(inode); in fuse_dentry_revalidate()
286 struct fuse_entry_out *outarg, struct inode **inode) in fuse_lookup_name() argument
294 *inode = NULL; in fuse_lookup_name()
319 *inode = fuse_iget(sb, outarg->nodeid, outarg->generation, in fuse_lookup_name()
323 if (!*inode) { in fuse_lookup_name()
335 static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry, in fuse_lookup()
340 struct inode *inode; in fuse_lookup() local
345 &outarg, &inode); in fuse_lookup()
354 if (inode && get_node_id(inode) == FUSE_ROOT_ID) in fuse_lookup()
357 newent = d_splice_alias(inode, entry); in fuse_lookup()
372 iput(inode); in fuse_lookup()
383 static int fuse_create_open(struct inode *dir, struct dentry *entry, in fuse_create_open()
388 struct inode *inode; in fuse_create_open() local
442 inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation, in fuse_create_open()
444 if (!inode) { in fuse_create_open()
452 d_instantiate(entry, inode); in fuse_create_open()
460 fuse_finish_open(inode, file); in fuse_create_open()
472 static int fuse_mknod(struct inode *, struct dentry *, umode_t, dev_t);
473 static int fuse_atomic_open(struct inode *dir, struct dentry *entry, in fuse_atomic_open()
520 struct inode *dir, struct dentry *entry, in create_new_entry()
524 struct inode *inode; in create_new_entry() local
548 inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, in create_new_entry()
550 if (!inode) { in create_new_entry()
556 err = d_instantiate_no_diralias(entry, inode); in create_new_entry()
569 static int fuse_mknod(struct inode *dir, struct dentry *entry, umode_t mode, in fuse_mknod()
592 static int fuse_create(struct inode *dir, struct dentry *entry, umode_t mode, in fuse_create()
598 static int fuse_mkdir(struct inode *dir, struct dentry *entry, umode_t mode) in fuse_mkdir()
619 static int fuse_symlink(struct inode *dir, struct dentry *entry, in fuse_symlink()
635 static inline void fuse_update_ctime(struct inode *inode) in fuse_update_ctime() argument
637 if (!IS_NOCMTIME(inode)) { in fuse_update_ctime()
638 inode->i_ctime = current_fs_time(inode->i_sb); in fuse_update_ctime()
639 mark_inode_dirty_sync(inode); in fuse_update_ctime()
643 static int fuse_unlink(struct inode *dir, struct dentry *entry) in fuse_unlink()
656 struct inode *inode = d_inode(entry); in fuse_unlink() local
657 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_unlink()
667 if (inode->i_nlink > 0) in fuse_unlink()
668 drop_nlink(inode); in fuse_unlink()
670 fuse_invalidate_attr(inode); in fuse_unlink()
673 fuse_update_ctime(inode); in fuse_unlink()
679 static int fuse_rmdir(struct inode *dir, struct dentry *entry) in fuse_rmdir()
700 static int fuse_rename_common(struct inode *olddir, struct dentry *oldent, in fuse_rename_common()
701 struct inode *newdir, struct dentry *newent, in fuse_rename_common()
756 static int fuse_rename2(struct inode *olddir, struct dentry *oldent, in fuse_rename2()
757 struct inode *newdir, struct dentry *newent, in fuse_rename2()
786 static int fuse_link(struct dentry *entry, struct inode *newdir, in fuse_link()
791 struct inode *inode = d_inode(entry); in fuse_link() local
792 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_link()
796 inarg.oldnodeid = get_node_id(inode); in fuse_link()
803 err = create_new_entry(fc, &args, newdir, newent, inode->i_mode); in fuse_link()
811 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_link()
815 inc_nlink(inode); in fuse_link()
817 fuse_invalidate_attr(inode); in fuse_link()
818 fuse_update_ctime(inode); in fuse_link()
820 fuse_invalidate_attr(inode); in fuse_link()
825 static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr, in fuse_fillattr() argument
829 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_fillattr()
832 if (fc->writeback_cache && S_ISREG(inode->i_mode)) { in fuse_fillattr()
833 attr->size = i_size_read(inode); in fuse_fillattr()
834 attr->mtime = inode->i_mtime.tv_sec; in fuse_fillattr()
835 attr->mtimensec = inode->i_mtime.tv_nsec; in fuse_fillattr()
836 attr->ctime = inode->i_ctime.tv_sec; in fuse_fillattr()
837 attr->ctimensec = inode->i_ctime.tv_nsec; in fuse_fillattr()
840 stat->dev = inode->i_sb->s_dev; in fuse_fillattr()
842 stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777); in fuse_fillattr()
846 stat->rdev = inode->i_rdev; in fuse_fillattr()
859 blkbits = inode->i_sb->s_blocksize_bits; in fuse_fillattr()
864 static int fuse_do_getattr(struct inode *inode, struct kstat *stat, in fuse_do_getattr() argument
870 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_do_getattr()
879 if (file && S_ISREG(inode->i_mode)) { in fuse_do_getattr()
886 args.in.h.nodeid = get_node_id(inode); in fuse_do_getattr()
895 if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) { in fuse_do_getattr()
896 make_bad_inode(inode); in fuse_do_getattr()
899 fuse_change_attributes(inode, &outarg.attr, in fuse_do_getattr()
903 fuse_fillattr(inode, &outarg.attr, stat); in fuse_do_getattr()
909 int fuse_update_attributes(struct inode *inode, struct kstat *stat, in fuse_update_attributes() argument
912 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_update_attributes()
918 err = fuse_do_getattr(inode, stat, file); in fuse_update_attributes()
923 generic_fillattr(inode, stat); in fuse_update_attributes()
939 struct inode *parent; in fuse_reverse_inval_entry()
1032 static int fuse_access(struct inode *inode, int mask) in fuse_access() argument
1034 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_access()
1047 args.in.h.nodeid = get_node_id(inode); in fuse_access()
1059 static int fuse_perm_getattr(struct inode *inode, int mask) in fuse_perm_getattr() argument
1064 return fuse_do_getattr(inode, NULL, NULL); in fuse_perm_getattr()
1080 static int fuse_permission(struct inode *inode, int mask) in fuse_permission() argument
1082 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_permission()
1093 ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) { in fuse_permission()
1094 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_permission()
1099 err = fuse_perm_getattr(inode, mask); in fuse_permission()
1106 err = generic_permission(inode, mask); in fuse_permission()
1112 err = fuse_perm_getattr(inode, mask); in fuse_permission()
1114 err = generic_permission(inode, mask); in fuse_permission()
1122 err = fuse_access(inode, mask); in fuse_permission()
1123 } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) { in fuse_permission()
1124 if (!(inode->i_mode & S_IXUGO)) { in fuse_permission()
1128 err = fuse_perm_getattr(inode, mask); in fuse_permission()
1129 if (!err && !(inode->i_mode & S_IXUGO)) in fuse_permission()
1172 struct inode *dir = d_inode(parent); in fuse_direntplus_link()
1174 struct inode *inode; in fuse_direntplus_link() local
1208 inode = d_inode(dentry); in fuse_direntplus_link()
1209 if (!inode) { in fuse_direntplus_link()
1211 } else if (get_node_id(inode) != o->nodeid || in fuse_direntplus_link()
1212 ((o->attr.mode ^ inode->i_mode) & S_IFMT)) { in fuse_direntplus_link()
1214 } else if (is_bad_inode(inode)) { in fuse_direntplus_link()
1219 fi = get_fuse_inode(inode); in fuse_direntplus_link()
1224 fuse_change_attributes(inode, &o->attr, in fuse_direntplus_link()
1242 inode = fuse_iget(dir->i_sb, o->nodeid, o->generation, in fuse_direntplus_link()
1244 if (!inode) in fuse_direntplus_link()
1247 alias = d_splice_alias(inode, dentry); in fuse_direntplus_link()
1259 set_bit(FUSE_I_INIT_RDPLUS, &get_fuse_inode(inode)->state); in fuse_direntplus_link()
1317 struct inode *inode = file_inode(file); in fuse_readdir() local
1318 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_readdir()
1322 if (is_bad_inode(inode)) in fuse_readdir()
1335 plus = fuse_use_readdirplus(inode, ctx); in fuse_readdir()
1364 fuse_invalidate_atime(inode); in fuse_readdir()
1370 struct inode *inode = d_inode(dentry); in read_link() local
1371 struct fuse_conn *fc = get_fuse_conn(inode); in read_link()
1381 args.in.h.nodeid = get_node_id(inode); in read_link()
1393 fuse_invalidate_atime(inode); in read_link()
1414 static int fuse_dir_open(struct inode *inode, struct file *file) in fuse_dir_open() argument
1416 return fuse_open_common(inode, file, true); in fuse_dir_open()
1419 static int fuse_dir_release(struct inode *inode, struct file *file) in fuse_dir_release() argument
1514 void fuse_set_nowrite(struct inode *inode) in fuse_set_nowrite() argument
1516 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_set_nowrite()
1517 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_set_nowrite()
1519 BUG_ON(!mutex_is_locked(&inode->i_mutex)); in fuse_set_nowrite()
1534 static void __fuse_release_nowrite(struct inode *inode) in __fuse_release_nowrite() argument
1536 struct fuse_inode *fi = get_fuse_inode(inode); in __fuse_release_nowrite()
1540 fuse_flush_writepages(inode); in __fuse_release_nowrite()
1543 void fuse_release_nowrite(struct inode *inode) in fuse_release_nowrite() argument
1545 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_release_nowrite()
1548 __fuse_release_nowrite(inode); in fuse_release_nowrite()
1553 struct inode *inode, in fuse_setattr_fill() argument
1558 args->in.h.nodeid = get_node_id(inode); in fuse_setattr_fill()
1570 int fuse_flush_times(struct inode *inode, struct fuse_file *ff) in fuse_flush_times() argument
1572 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_flush_times()
1581 inarg.mtime = inode->i_mtime.tv_sec; in fuse_flush_times()
1582 inarg.mtimensec = inode->i_mtime.tv_nsec; in fuse_flush_times()
1585 inarg.ctime = inode->i_ctime.tv_sec; in fuse_flush_times()
1586 inarg.ctimensec = inode->i_ctime.tv_nsec; in fuse_flush_times()
1592 fuse_setattr_fill(fc, &args, inode, &inarg, &outarg); in fuse_flush_times()
1605 int fuse_do_setattr(struct inode *inode, struct iattr *attr, in fuse_do_setattr() argument
1608 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_do_setattr()
1609 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_do_setattr()
1617 bool trust_local_cmtime = is_wb && S_ISREG(inode->i_mode); in fuse_do_setattr()
1622 err = inode_change_ok(inode, attr); in fuse_do_setattr()
1636 fuse_set_nowrite(inode); in fuse_do_setattr()
1638 if (trust_local_cmtime && attr->ia_size != inode->i_size) in fuse_do_setattr()
1655 fuse_setattr_fill(fc, &args, inode, &inarg, &outarg); in fuse_do_setattr()
1659 fuse_invalidate_attr(inode); in fuse_do_setattr()
1663 if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) { in fuse_do_setattr()
1664 make_bad_inode(inode); in fuse_do_setattr()
1673 inode->i_mtime = attr->ia_mtime; in fuse_do_setattr()
1675 inode->i_ctime = attr->ia_ctime; in fuse_do_setattr()
1679 fuse_change_attributes_common(inode, &outarg.attr, in fuse_do_setattr()
1681 oldsize = inode->i_size; in fuse_do_setattr()
1683 if (!is_wb || is_truncate || !S_ISREG(inode->i_mode)) in fuse_do_setattr()
1684 i_size_write(inode, outarg.attr.size); in fuse_do_setattr()
1688 __fuse_release_nowrite(inode); in fuse_do_setattr()
1697 S_ISREG(inode->i_mode) && oldsize != outarg.attr.size) { in fuse_do_setattr()
1698 truncate_pagecache(inode, outarg.attr.size); in fuse_do_setattr()
1699 invalidate_inode_pages2(inode->i_mapping); in fuse_do_setattr()
1707 fuse_release_nowrite(inode); in fuse_do_setattr()
1715 struct inode *inode = d_inode(entry); in fuse_setattr() local
1717 if (!fuse_allow_current_process(get_fuse_conn(inode))) in fuse_setattr()
1721 return fuse_do_setattr(inode, attr, attr->ia_file); in fuse_setattr()
1723 return fuse_do_setattr(inode, attr, NULL); in fuse_setattr()
1729 struct inode *inode = d_inode(entry); in fuse_getattr() local
1730 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_getattr()
1735 return fuse_update_attributes(inode, stat, NULL, NULL); in fuse_getattr()
1741 struct inode *inode = d_inode(entry); in fuse_setxattr() local
1742 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_setxattr()
1754 args.in.h.nodeid = get_node_id(inode); in fuse_setxattr()
1768 fuse_invalidate_attr(inode); in fuse_setxattr()
1769 fuse_update_ctime(inode); in fuse_setxattr()
1777 struct inode *inode = d_inode(entry); in fuse_getxattr() local
1778 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_getxattr()
1790 args.in.h.nodeid = get_node_id(inode); in fuse_getxattr()
1818 struct inode *inode = d_inode(entry); in fuse_listxattr() local
1819 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_listxattr()
1834 args.in.h.nodeid = get_node_id(inode); in fuse_listxattr()
1860 struct inode *inode = d_inode(entry); in fuse_removexattr() local
1861 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_removexattr()
1869 args.in.h.nodeid = get_node_id(inode); in fuse_removexattr()
1879 fuse_invalidate_attr(inode); in fuse_removexattr()
1880 fuse_update_ctime(inode); in fuse_removexattr()
1938 void fuse_init_common(struct inode *inode) in fuse_init_common() argument
1940 inode->i_op = &fuse_common_inode_operations; in fuse_init_common()
1943 void fuse_init_dir(struct inode *inode) in fuse_init_dir() argument
1945 inode->i_op = &fuse_dir_inode_operations; in fuse_init_dir()
1946 inode->i_fop = &fuse_dir_operations; in fuse_init_dir()
1949 void fuse_init_symlink(struct inode *inode) in fuse_init_symlink() argument
1951 inode->i_op = &fuse_symlink_inode_operations; in fuse_init_symlink()