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 ---