Loading fs/fuse/dir.c +8 −0 Original line number Diff line number Diff line Loading @@ -705,11 +705,19 @@ static int fuse_symlink(struct inode *dir, struct dentry *entry, return create_new_entry(fc, &args, dir, entry, S_IFLNK); } void fuse_flush_time_update(struct inode *inode) { int err = sync_inode_metadata(inode, 1); mapping_set_error(inode->i_mapping, err); } void fuse_update_ctime(struct inode *inode) { if (!IS_NOCMTIME(inode)) { inode->i_ctime = current_time(inode); mark_inode_dirty_sync(inode); fuse_flush_time_update(inode); } } Loading fs/fuse/file.c +13 −0 Original line number Diff line number Diff line Loading @@ -1621,6 +1621,17 @@ int fuse_write_inode(struct inode *inode, struct writeback_control *wbc) struct fuse_file *ff; int err; /* * Inode is always written before the last reference is dropped and * hence this should not be reached from reclaim. * * Writing back the inode from reclaim can deadlock if the request * processing itself needs an allocation. Allocations triggering * reclaim while serving a request can't be prevented, because it can * involve any number of unrelated userspace processes. */ WARN_ON(wbc->for_reclaim); ff = __fuse_write_file_get(fc, fi); err = fuse_flush_times(inode, ff); if (ff) Loading Loading @@ -3035,6 +3046,8 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, if (lock_inode) inode_unlock(inode); fuse_flush_time_update(inode); return err; } Loading fs/fuse/fuse_i.h +1 −0 Original line number Diff line number Diff line Loading @@ -924,6 +924,7 @@ int fuse_allow_current_process(struct fuse_conn *fc); u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id); void fuse_flush_time_update(struct inode *inode); void fuse_update_ctime(struct inode *inode); int fuse_update_attributes(struct inode *inode, struct file *file); Loading fs/fuse/inode.c +3 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,9 @@ static void fuse_destroy_inode(struct inode *inode) static void fuse_evict_inode(struct inode *inode) { /* Will write inode on close/munmap and in all other dirtiers */ WARN_ON(inode->i_state & I_DIRTY_INODE); truncate_inode_pages_final(&inode->i_data); clear_inode(inode); if (inode->i_sb->s_flags & SB_ACTIVE) { Loading Loading
fs/fuse/dir.c +8 −0 Original line number Diff line number Diff line Loading @@ -705,11 +705,19 @@ static int fuse_symlink(struct inode *dir, struct dentry *entry, return create_new_entry(fc, &args, dir, entry, S_IFLNK); } void fuse_flush_time_update(struct inode *inode) { int err = sync_inode_metadata(inode, 1); mapping_set_error(inode->i_mapping, err); } void fuse_update_ctime(struct inode *inode) { if (!IS_NOCMTIME(inode)) { inode->i_ctime = current_time(inode); mark_inode_dirty_sync(inode); fuse_flush_time_update(inode); } } Loading
fs/fuse/file.c +13 −0 Original line number Diff line number Diff line Loading @@ -1621,6 +1621,17 @@ int fuse_write_inode(struct inode *inode, struct writeback_control *wbc) struct fuse_file *ff; int err; /* * Inode is always written before the last reference is dropped and * hence this should not be reached from reclaim. * * Writing back the inode from reclaim can deadlock if the request * processing itself needs an allocation. Allocations triggering * reclaim while serving a request can't be prevented, because it can * involve any number of unrelated userspace processes. */ WARN_ON(wbc->for_reclaim); ff = __fuse_write_file_get(fc, fi); err = fuse_flush_times(inode, ff); if (ff) Loading Loading @@ -3035,6 +3046,8 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, if (lock_inode) inode_unlock(inode); fuse_flush_time_update(inode); return err; } Loading
fs/fuse/fuse_i.h +1 −0 Original line number Diff line number Diff line Loading @@ -924,6 +924,7 @@ int fuse_allow_current_process(struct fuse_conn *fc); u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id); void fuse_flush_time_update(struct inode *inode); void fuse_update_ctime(struct inode *inode); int fuse_update_attributes(struct inode *inode, struct file *file); Loading
fs/fuse/inode.c +3 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,9 @@ static void fuse_destroy_inode(struct inode *inode) static void fuse_evict_inode(struct inode *inode) { /* Will write inode on close/munmap and in all other dirtiers */ WARN_ON(inode->i_state & I_DIRTY_INODE); truncate_inode_pages_final(&inode->i_data); clear_inode(inode); if (inode->i_sb->s_flags & SB_ACTIVE) { Loading