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 fuse_follow_link() local
1371 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_follow_link()
1381 args.in.h.nodeid = get_node_id(inode); in fuse_follow_link()
1394 fuse_invalidate_atime(inode); in fuse_follow_link()
1398 static int fuse_dir_open(struct inode *inode, struct file *file) in fuse_dir_open() argument
1400 return fuse_open_common(inode, file, true); in fuse_dir_open()
1403 static int fuse_dir_release(struct inode *inode, struct file *file) in fuse_dir_release() argument
1498 void fuse_set_nowrite(struct inode *inode) in fuse_set_nowrite() argument
1500 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_set_nowrite()
1501 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_set_nowrite()
1503 BUG_ON(!mutex_is_locked(&inode->i_mutex)); in fuse_set_nowrite()
1518 static void __fuse_release_nowrite(struct inode *inode) in __fuse_release_nowrite() argument
1520 struct fuse_inode *fi = get_fuse_inode(inode); in __fuse_release_nowrite()
1524 fuse_flush_writepages(inode); in __fuse_release_nowrite()
1527 void fuse_release_nowrite(struct inode *inode) in fuse_release_nowrite() argument
1529 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_release_nowrite()
1532 __fuse_release_nowrite(inode); in fuse_release_nowrite()
1537 struct inode *inode, in fuse_setattr_fill() argument
1542 args->in.h.nodeid = get_node_id(inode); in fuse_setattr_fill()
1554 int fuse_flush_times(struct inode *inode, struct fuse_file *ff) in fuse_flush_times() argument
1556 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_flush_times()
1565 inarg.mtime = inode->i_mtime.tv_sec; in fuse_flush_times()
1566 inarg.mtimensec = inode->i_mtime.tv_nsec; in fuse_flush_times()
1569 inarg.ctime = inode->i_ctime.tv_sec; in fuse_flush_times()
1570 inarg.ctimensec = inode->i_ctime.tv_nsec; in fuse_flush_times()
1576 fuse_setattr_fill(fc, &args, inode, &inarg, &outarg); in fuse_flush_times()
1589 int fuse_do_setattr(struct inode *inode, struct iattr *attr, in fuse_do_setattr() argument
1592 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_do_setattr()
1593 struct fuse_inode *fi = get_fuse_inode(inode); in fuse_do_setattr()
1601 bool trust_local_cmtime = is_wb && S_ISREG(inode->i_mode); in fuse_do_setattr()
1606 err = inode_change_ok(inode, attr); in fuse_do_setattr()
1620 fuse_set_nowrite(inode); in fuse_do_setattr()
1622 if (trust_local_cmtime && attr->ia_size != inode->i_size) in fuse_do_setattr()
1639 fuse_setattr_fill(fc, &args, inode, &inarg, &outarg); in fuse_do_setattr()
1643 fuse_invalidate_attr(inode); in fuse_do_setattr()
1647 if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) { in fuse_do_setattr()
1648 make_bad_inode(inode); in fuse_do_setattr()
1657 inode->i_mtime = attr->ia_mtime; in fuse_do_setattr()
1659 inode->i_ctime = attr->ia_ctime; in fuse_do_setattr()
1663 fuse_change_attributes_common(inode, &outarg.attr, in fuse_do_setattr()
1665 oldsize = inode->i_size; in fuse_do_setattr()
1667 if (!is_wb || is_truncate || !S_ISREG(inode->i_mode)) in fuse_do_setattr()
1668 i_size_write(inode, outarg.attr.size); in fuse_do_setattr()
1672 __fuse_release_nowrite(inode); in fuse_do_setattr()
1681 S_ISREG(inode->i_mode) && oldsize != outarg.attr.size) { in fuse_do_setattr()
1682 truncate_pagecache(inode, outarg.attr.size); in fuse_do_setattr()
1683 invalidate_inode_pages2(inode->i_mapping); in fuse_do_setattr()
1691 fuse_release_nowrite(inode); in fuse_do_setattr()
1699 struct inode *inode = d_inode(entry); in fuse_setattr() local
1701 if (!fuse_allow_current_process(get_fuse_conn(inode))) in fuse_setattr()
1705 return fuse_do_setattr(inode, attr, attr->ia_file); in fuse_setattr()
1707 return fuse_do_setattr(inode, attr, NULL); in fuse_setattr()
1713 struct inode *inode = d_inode(entry); in fuse_getattr() local
1714 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_getattr()
1719 return fuse_update_attributes(inode, stat, NULL, NULL); in fuse_getattr()
1725 struct inode *inode = d_inode(entry); in fuse_setxattr() local
1726 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_setxattr()
1738 args.in.h.nodeid = get_node_id(inode); in fuse_setxattr()
1752 fuse_invalidate_attr(inode); in fuse_setxattr()
1753 fuse_update_ctime(inode); in fuse_setxattr()
1761 struct inode *inode = d_inode(entry); in fuse_getxattr() local
1762 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_getxattr()
1774 args.in.h.nodeid = get_node_id(inode); in fuse_getxattr()
1802 struct inode *inode = d_inode(entry); in fuse_listxattr() local
1803 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_listxattr()
1818 args.in.h.nodeid = get_node_id(inode); in fuse_listxattr()
1844 struct inode *inode = d_inode(entry); in fuse_removexattr() local
1845 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_removexattr()
1853 args.in.h.nodeid = get_node_id(inode); in fuse_removexattr()
1863 fuse_invalidate_attr(inode); in fuse_removexattr()
1864 fuse_update_ctime(inode); in fuse_removexattr()
1922 void fuse_init_common(struct inode *inode) in fuse_init_common() argument
1924 inode->i_op = &fuse_common_inode_operations; in fuse_init_common()
1927 void fuse_init_dir(struct inode *inode) in fuse_init_dir() argument
1929 inode->i_op = &fuse_dir_inode_operations; in fuse_init_dir()
1930 inode->i_fop = &fuse_dir_operations; in fuse_init_dir()
1933 void fuse_init_symlink(struct inode *inode) in fuse_init_symlink() argument
1935 inode->i_op = &fuse_symlink_inode_operations; in fuse_init_symlink()