inode.c (4f2c0a4acffbec01079c28f839422e64ddeff004) | inode.c (facd61053cff100973921d4d45d47cf53c747ec6) |
---|---|
1/* 2 FUSE: Filesystem in Userspace 3 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu> 4 5 This program can be distributed under the terms of the GNU GPL. 6 See the file COPYING. 7*/ 8 --- 297 unchanged lines hidden (view full) --- 306 if (inval) 307 invalidate_inode_pages2(inode->i_mapping); 308 } 309 310 if (IS_ENABLED(CONFIG_FUSE_DAX)) 311 fuse_dax_dontcache(inode, attr->flags); 312} 313 | 1/* 2 FUSE: Filesystem in Userspace 3 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu> 4 5 This program can be distributed under the terms of the GNU GPL. 6 See the file COPYING. 7*/ 8 --- 297 unchanged lines hidden (view full) --- 306 if (inval) 307 invalidate_inode_pages2(inode->i_mapping); 308 } 309 310 if (IS_ENABLED(CONFIG_FUSE_DAX)) 311 fuse_dax_dontcache(inode, attr->flags); 312} 313 |
314static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr) | 314static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr, 315 struct fuse_conn *fc) |
315{ 316 inode->i_mode = attr->mode & S_IFMT; 317 inode->i_size = attr->size; 318 inode->i_mtime.tv_sec = attr->mtime; 319 inode->i_mtime.tv_nsec = attr->mtimensec; 320 inode->i_ctime.tv_sec = attr->ctime; 321 inode->i_ctime.tv_nsec = attr->ctimensec; 322 if (S_ISREG(inode->i_mode)) { --- 5 unchanged lines hidden (view full) --- 328 fuse_init_symlink(inode); 329 else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || 330 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { 331 fuse_init_common(inode); 332 init_special_inode(inode, inode->i_mode, 333 new_decode_dev(attr->rdev)); 334 } else 335 BUG(); | 316{ 317 inode->i_mode = attr->mode & S_IFMT; 318 inode->i_size = attr->size; 319 inode->i_mtime.tv_sec = attr->mtime; 320 inode->i_mtime.tv_nsec = attr->mtimensec; 321 inode->i_ctime.tv_sec = attr->ctime; 322 inode->i_ctime.tv_nsec = attr->ctimensec; 323 if (S_ISREG(inode->i_mode)) { --- 5 unchanged lines hidden (view full) --- 329 fuse_init_symlink(inode); 330 else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || 331 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { 332 fuse_init_common(inode); 333 init_special_inode(inode, inode->i_mode, 334 new_decode_dev(attr->rdev)); 335 } else 336 BUG(); |
337 /* 338 * Ensure that we don't cache acls for daemons without FUSE_POSIX_ACL 339 * so they see the exact same behavior as before. 340 */ 341 if (!fc->posix_acl) 342 inode->i_acl = inode->i_default_acl = ACL_DONT_CACHE; |
|
336} 337 338static int fuse_inode_eq(struct inode *inode, void *_nodeidp) 339{ 340 u64 nodeid = *(u64 *) _nodeidp; 341 if (get_node_id(inode) == nodeid) 342 return 1; 343 else --- 23 unchanged lines hidden (view full) --- 367 * table. 368 */ 369 if (fc->auto_submounts && (attr->flags & FUSE_ATTR_SUBMOUNT) && 370 S_ISDIR(attr->mode)) { 371 inode = new_inode(sb); 372 if (!inode) 373 return NULL; 374 | 343} 344 345static int fuse_inode_eq(struct inode *inode, void *_nodeidp) 346{ 347 u64 nodeid = *(u64 *) _nodeidp; 348 if (get_node_id(inode) == nodeid) 349 return 1; 350 else --- 23 unchanged lines hidden (view full) --- 374 * table. 375 */ 376 if (fc->auto_submounts && (attr->flags & FUSE_ATTR_SUBMOUNT) && 377 S_ISDIR(attr->mode)) { 378 inode = new_inode(sb); 379 if (!inode) 380 return NULL; 381 |
375 fuse_init_inode(inode, attr); | 382 fuse_init_inode(inode, attr, fc); |
376 get_fuse_inode(inode)->nodeid = nodeid; 377 inode->i_flags |= S_AUTOMOUNT; 378 goto done; 379 } 380 381retry: 382 inode = iget5_locked(sb, nodeid, fuse_inode_eq, fuse_inode_set, &nodeid); 383 if (!inode) 384 return NULL; 385 386 if ((inode->i_state & I_NEW)) { 387 inode->i_flags |= S_NOATIME; 388 if (!fc->writeback_cache || !S_ISREG(attr->mode)) 389 inode->i_flags |= S_NOCMTIME; 390 inode->i_generation = generation; | 383 get_fuse_inode(inode)->nodeid = nodeid; 384 inode->i_flags |= S_AUTOMOUNT; 385 goto done; 386 } 387 388retry: 389 inode = iget5_locked(sb, nodeid, fuse_inode_eq, fuse_inode_set, &nodeid); 390 if (!inode) 391 return NULL; 392 393 if ((inode->i_state & I_NEW)) { 394 inode->i_flags |= S_NOATIME; 395 if (!fc->writeback_cache || !S_ISREG(attr->mode)) 396 inode->i_flags |= S_NOCMTIME; 397 inode->i_generation = generation; |
391 fuse_init_inode(inode, attr); | 398 fuse_init_inode(inode, attr, fc); |
392 unlock_new_inode(inode); 393 } else if (fuse_stale_inode(inode, generation, attr)) { 394 /* nodeid was reused, any I/O on the old inode should fail */ 395 fuse_make_bad(inode); 396 iput(inode); 397 goto retry; 398 } 399done: --- 769 unchanged lines hidden (view full) --- 1169 fc->parallel_dirops = 1; 1170 if (flags & FUSE_HANDLE_KILLPRIV) 1171 fc->handle_killpriv = 1; 1172 if (arg->time_gran && arg->time_gran <= 1000000000) 1173 fm->sb->s_time_gran = arg->time_gran; 1174 if ((flags & FUSE_POSIX_ACL)) { 1175 fc->default_permissions = 1; 1176 fc->posix_acl = 1; | 399 unlock_new_inode(inode); 400 } else if (fuse_stale_inode(inode, generation, attr)) { 401 /* nodeid was reused, any I/O on the old inode should fail */ 402 fuse_make_bad(inode); 403 iput(inode); 404 goto retry; 405 } 406done: --- 769 unchanged lines hidden (view full) --- 1176 fc->parallel_dirops = 1; 1177 if (flags & FUSE_HANDLE_KILLPRIV) 1178 fc->handle_killpriv = 1; 1179 if (arg->time_gran && arg->time_gran <= 1000000000) 1180 fm->sb->s_time_gran = arg->time_gran; 1181 if ((flags & FUSE_POSIX_ACL)) { 1182 fc->default_permissions = 1; 1183 fc->posix_acl = 1; |
1177 fm->sb->s_xattr = fuse_acl_xattr_handlers; | |
1178 } 1179 if (flags & FUSE_CACHE_SYMLINKS) 1180 fc->cache_symlinks = 1; 1181 if (flags & FUSE_ABORT_ERROR) 1182 fc->abort_err = 1; 1183 if (flags & FUSE_MAX_PAGES) { 1184 fc->max_pages = 1185 min_t(unsigned int, fc->max_pages_limit, --- 229 unchanged lines hidden (view full) --- 1415 sb->s_xattr = fuse_xattr_handlers; 1416 sb->s_maxbytes = MAX_LFS_FILESIZE; 1417 sb->s_time_gran = 1; 1418 sb->s_export_op = &fuse_export_operations; 1419 sb->s_iflags |= SB_I_IMA_UNVERIFIABLE_SIGNATURE; 1420 if (sb->s_user_ns != &init_user_ns) 1421 sb->s_iflags |= SB_I_UNTRUSTED_MOUNTER; 1422 sb->s_flags &= ~(SB_NOSEC | SB_I_VERSION); | 1184 } 1185 if (flags & FUSE_CACHE_SYMLINKS) 1186 fc->cache_symlinks = 1; 1187 if (flags & FUSE_ABORT_ERROR) 1188 fc->abort_err = 1; 1189 if (flags & FUSE_MAX_PAGES) { 1190 fc->max_pages = 1191 min_t(unsigned int, fc->max_pages_limit, --- 229 unchanged lines hidden (view full) --- 1421 sb->s_xattr = fuse_xattr_handlers; 1422 sb->s_maxbytes = MAX_LFS_FILESIZE; 1423 sb->s_time_gran = 1; 1424 sb->s_export_op = &fuse_export_operations; 1425 sb->s_iflags |= SB_I_IMA_UNVERIFIABLE_SIGNATURE; 1426 if (sb->s_user_ns != &init_user_ns) 1427 sb->s_iflags |= SB_I_UNTRUSTED_MOUNTER; 1428 sb->s_flags &= ~(SB_NOSEC | SB_I_VERSION); |
1423 1424 /* 1425 * If we are not in the initial user namespace posix 1426 * acls must be translated. 1427 */ 1428 if (sb->s_user_ns != &init_user_ns) 1429 sb->s_xattr = fuse_no_acl_xattr_handlers; | |
1430} 1431 1432static int fuse_fill_super_submount(struct super_block *sb, 1433 struct fuse_inode *parent_fi) 1434{ 1435 struct fuse_mount *fm = get_fuse_mount_super(sb); 1436 struct super_block *parent_sb = parent_fi->inode.i_sb; 1437 struct fuse_attr root_attr; --- 559 unchanged lines hidden --- | 1429} 1430 1431static int fuse_fill_super_submount(struct super_block *sb, 1432 struct fuse_inode *parent_fi) 1433{ 1434 struct fuse_mount *fm = get_fuse_mount_super(sb); 1435 struct super_block *parent_sb = parent_fi->inode.i_sb; 1436 struct fuse_attr root_attr; --- 559 unchanged lines hidden --- |