mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
fuse: fuse_i.h: clean up kernel-doc comments
Convert many comments to kernel-doc format to eliminate around 20 kernel-doc warnings like these: Warning: fs/fuse/fuse_i.h:374 This comment starts with '/**', but isn't a kernel-doc comment. Refer to Documentation/doc-guide/kernel-doc.rst * A Fuse connection. Warning: fs/fuse/fuse_i.h:817 This comment starts with '/**', but isn't a kernel-doc comment. Refer to Documentation/doc-guide/kernel-doc.rst * Get a filled in inode Warning: fs/fuse/fuse_i.h:859 This comment starts with '/**', but isn't a kernel-doc comment. Refer to Documentation/doc-guide/kernel-doc.rst * Send RELEASE or RELEASEDIR request and more like this. Also add struct member and function parameter descriptions to avoid these warnings: Warning: fs/fuse/fuse_i.h:1071 struct member 'epoch_work' not described in 'fuse_conn' Warning: fs/fuse/fuse_i.h:1071 struct member 'rcu' not described in 'fuse_conn' Warning: fs/fuse/fuse_i.h:1423 function parameter 'fc' not described in 'fuse_reverse_inval_inode' Warning: fs/fuse/fuse_i.h:1423 function parameter 'nodeid' not described in 'fuse_reverse_inval_inode' Warning: fs/fuse/fuse_i.h:1423 function parameter 'offset' not described in 'fuse_reverse_inval_inode' Warning: fs/fuse/fuse_i.h:1423 function parameter 'len' not described in 'fuse_reverse_inval_inode' Warning: fs/fuse/fuse_i.h:1436 function parameter 'fc' not described in 'fuse_reverse_inval_entry' Warning: fs/fuse/fuse_i.h:1436 function parameter 'parent_nodeid' not described in 'fuse_reverse_inval_entry' Warning: fs/fuse/fuse_i.h:1436 function parameter 'child_nodeid' not described in 'fuse_reverse_inval_entry' Warning: fs/fuse/fuse_i.h:1436 function parameter 'name' not described in 'fuse_reverse_inval_entry' Warning: fs/fuse/fuse_i.h:1436 function parameter 'flags' not described in 'fuse_reverse_inval_entry' Convert struct fuse_file, struct fuse_submount_lookup, struct fuse_inode, and struct fuse_conn to kernel-doc. Convert these to plain comments: Warning: fs/fuse/fuse_i.h:1423 expecting prototype for File(). Prototype was for fuse_reverse_inval_inode() instead Warning: fs/fuse/fuse_i.h:1436 expecting prototype for File(). Prototype was for fuse_reverse_inval_entry() instead Change some "/**" to "/*" since they are not kernel-doc comments. The changes above fix most kernel-doc warnings in this file but these warnings are not fixed and still remain: Warning: fs/fuse/fuse_i.h:1428 No description found for return value of 'fuse_fill_super_common' Warning: fs/fuse/fuse_i.h:1455 No description found for return value of 'fuse_ctl_add_conn' Binary build output is the same before and after these changes. Signed-off-by: Randy Dunlap <rdunlap@infradead.org> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
eafb65976d
commit
567820f02a
455
fs/fuse/fuse_i.h
455
fs/fuse/fuse_i.h
|
|
@ -71,137 +71,166 @@ extern unsigned int max_user_congthresh;
|
|||
|
||||
struct fuse_forget_link;
|
||||
|
||||
/* Submount lookup tracking */
|
||||
/**
|
||||
* struct fuse_submount_lookup - Submount lookup tracking
|
||||
*/
|
||||
struct fuse_submount_lookup {
|
||||
/** Refcount */
|
||||
/** @count: Refcount */
|
||||
refcount_t count;
|
||||
|
||||
/** Unique ID, which identifies the inode between userspace
|
||||
* and kernel */
|
||||
/**
|
||||
* @nodeid: Unique ID, which identifies the inode between userspace
|
||||
* and kernel
|
||||
*/
|
||||
u64 nodeid;
|
||||
|
||||
/** The request used for sending the FORGET message */
|
||||
/** @forget: The request used for sending the FORGET message */
|
||||
struct fuse_forget_link *forget;
|
||||
};
|
||||
|
||||
/** Container for data related to mapping to backing file */
|
||||
/* Container for data related to mapping to backing file */
|
||||
struct fuse_backing {
|
||||
struct file *file;
|
||||
struct cred *cred;
|
||||
|
||||
/** refcount */
|
||||
/* refcount */
|
||||
refcount_t count;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
/** FUSE inode */
|
||||
/**
|
||||
* struct fuse_inode - FUSE inode
|
||||
*/
|
||||
struct fuse_inode {
|
||||
/** Inode data */
|
||||
/** @inode: Inode data */
|
||||
struct inode inode;
|
||||
|
||||
/** Unique ID, which identifies the inode between userspace
|
||||
* and kernel */
|
||||
/**
|
||||
* @nodeid: Unique ID, which identifies the inode between userspace
|
||||
* and kernel
|
||||
*/
|
||||
u64 nodeid;
|
||||
|
||||
/** Number of lookups on this inode */
|
||||
/** @nlookup: Number of lookups on this inode */
|
||||
u64 nlookup;
|
||||
|
||||
/** The request used for sending the FORGET message */
|
||||
/** @forget: The request used for sending the FORGET message */
|
||||
struct fuse_forget_link *forget;
|
||||
|
||||
/** Time in jiffies until the file attributes are valid */
|
||||
/** @i_time: Time in jiffies until the file attributes are valid */
|
||||
u64 i_time;
|
||||
|
||||
/* Which attributes are invalid */
|
||||
/** @inval_mask: Which attributes are invalid */
|
||||
u32 inval_mask;
|
||||
|
||||
/** The sticky bit in inode->i_mode may have been removed, so
|
||||
preserve the original mode */
|
||||
/**
|
||||
* @orig_i_mode: The sticky bit in inode->i_mode may have been removed,
|
||||
* so preserve the original mode
|
||||
*/
|
||||
umode_t orig_i_mode;
|
||||
|
||||
/* Cache birthtime */
|
||||
/** @i_btime: Cache birthtime */
|
||||
struct timespec64 i_btime;
|
||||
|
||||
/** 64 bit inode number */
|
||||
/** @orig_ino: 64-bit inode number */
|
||||
u64 orig_ino;
|
||||
|
||||
/** Version of last attribute change */
|
||||
/** @attr_version: Version of last attribute change */
|
||||
u64 attr_version;
|
||||
|
||||
union {
|
||||
/* read/write io cache (regular file only) */
|
||||
struct {
|
||||
/* Files usable in writepage. Protected by fi->lock */
|
||||
/**
|
||||
* @write_files: Files usable in writepage.
|
||||
* Protected by fi->lock
|
||||
*/
|
||||
struct list_head write_files;
|
||||
|
||||
/* Writepages pending on truncate or fsync */
|
||||
/**
|
||||
* @queued_writes: Writepages pending on truncate or
|
||||
* fsync
|
||||
*/
|
||||
struct list_head queued_writes;
|
||||
|
||||
/* Number of sent writes, a negative bias
|
||||
* (FUSE_NOWRITE) means more writes are blocked */
|
||||
/**
|
||||
* @writectr: Number of sent writes, a negative bias
|
||||
* (FUSE_NOWRITE) means more writes are blocked
|
||||
*/
|
||||
int writectr;
|
||||
|
||||
/** Number of files/maps using page cache */
|
||||
/** @iocachectr: Number of files/maps using page cache */
|
||||
int iocachectr;
|
||||
|
||||
/* Waitq for writepage completion */
|
||||
/** @page_waitq: Waitq for writepage completion */
|
||||
wait_queue_head_t page_waitq;
|
||||
|
||||
/* waitq for direct-io completion */
|
||||
/** @direct_io_waitq: waitq for direct-io completion */
|
||||
wait_queue_head_t direct_io_waitq;
|
||||
};
|
||||
|
||||
/* readdir cache (directory only) */
|
||||
/** @rdc: readdir cache (directory only) */
|
||||
struct {
|
||||
/* true if fully cached */
|
||||
/** @cached: true if fully cached */
|
||||
bool cached;
|
||||
|
||||
/* size of cache */
|
||||
/** @size: size of cache */
|
||||
loff_t size;
|
||||
|
||||
/* position at end of cache (position of next entry) */
|
||||
/**
|
||||
* @pos: position at end of cache (position of next
|
||||
* entry)
|
||||
*/
|
||||
loff_t pos;
|
||||
|
||||
/* version of the cache */
|
||||
/** @version: version of the cache */
|
||||
u64 version;
|
||||
|
||||
/* modification time of directory when cache was
|
||||
* started */
|
||||
/**
|
||||
* @mtime: modification time of directory when cache was
|
||||
* started
|
||||
*/
|
||||
struct timespec64 mtime;
|
||||
|
||||
/* iversion of directory when cache was started */
|
||||
/**
|
||||
* @iversion: iversion of directory when cache was
|
||||
* started
|
||||
*/
|
||||
u64 iversion;
|
||||
|
||||
/* protects above fields */
|
||||
/** @lock: protects above fields */
|
||||
spinlock_t lock;
|
||||
} rdc;
|
||||
};
|
||||
|
||||
/** Miscellaneous bits describing inode state */
|
||||
/** @state: Miscellaneous bits describing inode state */
|
||||
unsigned long state;
|
||||
|
||||
/** Lock for serializing lookup and readdir for back compatibility*/
|
||||
/**
|
||||
* @mutex: Lock for serializing lookup and readdir for back
|
||||
* compatibility
|
||||
*/
|
||||
struct mutex mutex;
|
||||
|
||||
/** Lock to protect write related fields */
|
||||
/** @lock: Lock to protect write-related fields */
|
||||
spinlock_t lock;
|
||||
|
||||
#ifdef CONFIG_FUSE_DAX
|
||||
/*
|
||||
* Dax specific inode data
|
||||
/**
|
||||
* @dax: Dax specific inode data
|
||||
*/
|
||||
struct fuse_inode_dax *dax;
|
||||
#endif
|
||||
/** Submount specific lookup tracking */
|
||||
/** @submount_lookup: Submount specific lookup tracking */
|
||||
struct fuse_submount_lookup *submount_lookup;
|
||||
#ifdef CONFIG_FUSE_PASSTHROUGH
|
||||
/** Reference to backing file in passthrough mode */
|
||||
/** @fb: Reference to backing file in passthrough mode */
|
||||
struct fuse_backing *fb;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The underlying inode->i_blkbits value will not be modified,
|
||||
* so preserve the blocksize specified by the server.
|
||||
/**
|
||||
* @cached_i_blkbits: The underlying inode->i_blkbits value will not
|
||||
* be modified, so preserve the blocksize specified by the server.
|
||||
*/
|
||||
u8 cached_i_blkbits;
|
||||
};
|
||||
|
|
@ -231,61 +260,64 @@ struct fuse_conn;
|
|||
struct fuse_mount;
|
||||
union fuse_file_args;
|
||||
|
||||
/** FUSE specific file data */
|
||||
/**
|
||||
* struct fuse_file - FUSE-specific file data
|
||||
*/
|
||||
struct fuse_file {
|
||||
/** Fuse connection for this file */
|
||||
/** @fm: Fuse connection for this file */
|
||||
struct fuse_mount *fm;
|
||||
|
||||
/* Argument space reserved for open/release */
|
||||
/** @args: Argument space reserved for open/release */
|
||||
union fuse_file_args *args;
|
||||
|
||||
/** Kernel file handle guaranteed to be unique */
|
||||
/** @kh: Kernel file handle guaranteed to be unique */
|
||||
u64 kh;
|
||||
|
||||
/** File handle used by userspace */
|
||||
/** @fh: File handle used by userspace */
|
||||
u64 fh;
|
||||
|
||||
/** Node id of this file */
|
||||
/** @nodeid: Node id of this file */
|
||||
u64 nodeid;
|
||||
|
||||
/** Refcount */
|
||||
/** @count: Refcount */
|
||||
refcount_t count;
|
||||
|
||||
/** FOPEN_* flags returned by open */
|
||||
/** @open_flags: FOPEN_* flags returned by open */
|
||||
u32 open_flags;
|
||||
|
||||
/** Entry on inode's write_files list */
|
||||
/** @write_entry: Entry on inode's write_files list */
|
||||
struct list_head write_entry;
|
||||
|
||||
/* Readdir related */
|
||||
/** @readdir: Readdir-related */
|
||||
struct {
|
||||
/* Dir stream position */
|
||||
/** @pos: Dir stream position */
|
||||
loff_t pos;
|
||||
|
||||
/* Offset in cache */
|
||||
/** @cache_off: Offset in cache */
|
||||
loff_t cache_off;
|
||||
|
||||
/* Version of cache we are reading */
|
||||
/** @version: Version of cache we are reading */
|
||||
u64 version;
|
||||
|
||||
} readdir;
|
||||
|
||||
/** RB node to be linked on fuse_conn->polled_files */
|
||||
/** @polled_node: RB node to be linked on fuse_conn->polled_files */
|
||||
struct rb_node polled_node;
|
||||
|
||||
/** Wait queue head for poll */
|
||||
/** @poll_wait: Wait queue head for poll */
|
||||
wait_queue_head_t poll_wait;
|
||||
|
||||
/** Does file hold a fi->iocachectr refcount? */
|
||||
/** @iomode: Does file hold a fi->iocachectr refcount? */
|
||||
enum { IOM_NONE, IOM_CACHED, IOM_UNCACHED } iomode;
|
||||
|
||||
#ifdef CONFIG_FUSE_PASSTHROUGH
|
||||
/** Reference to backing file in passthrough mode */
|
||||
/** @passthrough: Reference to backing file in passthrough mode */
|
||||
struct file *passthrough;
|
||||
/** @cred: passthrough file credentials */
|
||||
const struct cred *cred;
|
||||
#endif
|
||||
|
||||
/** Has flock been performed on this file? */
|
||||
/** @flock: Has flock been performed on this file? */
|
||||
bool flock:1;
|
||||
};
|
||||
|
||||
|
|
@ -372,102 +404,135 @@ struct fuse_sync_bucket {
|
|||
};
|
||||
|
||||
/**
|
||||
* A Fuse connection.
|
||||
* struct fuse_conn - A Fuse connection.
|
||||
*
|
||||
* This structure is created, when the root filesystem is mounted, and
|
||||
* is destroyed, when the client device is closed and the last
|
||||
* fuse_mount is destroyed.
|
||||
*/
|
||||
struct fuse_conn {
|
||||
/** Lock protecting:
|
||||
- polled_files
|
||||
- backing_files_map
|
||||
- curr_bucket
|
||||
/**
|
||||
* @lock: Lock protecting:
|
||||
* - polled_files
|
||||
* - backing_files_map
|
||||
* - curr_bucket
|
||||
*/
|
||||
spinlock_t lock;
|
||||
|
||||
/** Refcount */
|
||||
/** @count: Refcount */
|
||||
refcount_t count;
|
||||
|
||||
/** Current epoch for up-to-date dentries */
|
||||
/** @epoch: Current epoch for up-to-date dentries */
|
||||
atomic_t epoch;
|
||||
|
||||
/** @epoch_work: Used to invalidate dentries from old epochs */
|
||||
struct work_struct epoch_work;
|
||||
|
||||
/** @rcu: Used to delay freeing fuse_conn, making it safe */
|
||||
struct rcu_head rcu;
|
||||
|
||||
/** The user id for this mount */
|
||||
/** @user_id: The user id for this mount */
|
||||
kuid_t user_id;
|
||||
|
||||
/** The group id for this mount */
|
||||
/** @group_id: The group id for this mount */
|
||||
kgid_t group_id;
|
||||
|
||||
/** The pid namespace for this mount */
|
||||
/** @pid_ns: The pid namespace for this mount */
|
||||
struct pid_namespace *pid_ns;
|
||||
|
||||
/** The user namespace for this mount */
|
||||
/** @user_ns: The user namespace for this mount */
|
||||
struct user_namespace *user_ns;
|
||||
|
||||
/** Maximum read size */
|
||||
/** @max_read: Maximum read size */
|
||||
unsigned max_read;
|
||||
|
||||
/** Maximum write size */
|
||||
/** @max_write: Maximum write size */
|
||||
unsigned max_write;
|
||||
|
||||
/** Maximum number of pages that can be used in a single request */
|
||||
/**
|
||||
* @max_pages: Maximum number of pages that can be used in a
|
||||
* single request
|
||||
*/
|
||||
unsigned int max_pages;
|
||||
|
||||
/** Constrain ->max_pages to this value during feature negotiation */
|
||||
/**
|
||||
* @max_pages_limit: Constrain ->max_pages to this value during
|
||||
* feature negotiation
|
||||
*/
|
||||
unsigned int max_pages_limit;
|
||||
|
||||
/* transport layer object */
|
||||
/** @chan: transport layer object */
|
||||
struct fuse_chan *chan;
|
||||
|
||||
/** The next unique kernel file handle */
|
||||
/** @khctr: The next unique kernel file handle */
|
||||
atomic64_t khctr;
|
||||
|
||||
/** rbtree of fuse_files waiting for poll events indexed by ph */
|
||||
/**
|
||||
* @polled_files: rbtree of fuse_files waiting for poll events
|
||||
* indexed by ph
|
||||
*/
|
||||
struct rb_root polled_files;
|
||||
|
||||
/** Number of background requests at which congestion starts */
|
||||
/**
|
||||
* @congestion_threshold: Number of background requests at which
|
||||
* congestion starts
|
||||
*/
|
||||
unsigned congestion_threshold;
|
||||
|
||||
/** Connection failed (version mismatch). Cannot race with
|
||||
setting other bitfields since it is only set once in INIT
|
||||
reply, before any other request, and never cleared */
|
||||
/**
|
||||
* @conn_error: Connection failed (version mismatch). Cannot race with
|
||||
* setting other bitfields since it is only set once in INIT
|
||||
* reply, before any other request, and never cleared
|
||||
*/
|
||||
unsigned conn_error:1;
|
||||
|
||||
/** Connection successful. Only set in INIT */
|
||||
/** @conn_init: Connection successful. Only set in INIT */
|
||||
unsigned conn_init:1;
|
||||
|
||||
/** Do readahead asynchronously? Only set in INIT */
|
||||
/** @async_read: Do readahead asynchronously? Only set in INIT */
|
||||
unsigned async_read:1;
|
||||
|
||||
/** Return an unique read error after abort. Only set in INIT */
|
||||
/**
|
||||
* @abort_err: Return an unique read error after abort.
|
||||
* Only set in INIT
|
||||
*/
|
||||
unsigned abort_err:1;
|
||||
|
||||
/** Do not send separate SETATTR request before open(O_TRUNC) */
|
||||
/**
|
||||
* @atomic_o_trunc: Do not send separate SETATTR request before
|
||||
* open(O_TRUNC)
|
||||
*/
|
||||
unsigned atomic_o_trunc:1;
|
||||
|
||||
/** Filesystem supports NFS exporting. Only set in INIT */
|
||||
/**
|
||||
* @export_support: Filesystem supports NFS exporting.
|
||||
* Only set in INIT
|
||||
*/
|
||||
unsigned export_support:1;
|
||||
|
||||
/** write-back cache policy (default is write-through) */
|
||||
/** @writeback_cache: write-back cache policy (default is write-through) */
|
||||
unsigned writeback_cache:1;
|
||||
|
||||
/** allow parallel lookups and readdir (default is serialized) */
|
||||
/**
|
||||
* @parallel_dirops: allow parallel lookups and readdir (default is
|
||||
* serialized)
|
||||
*/
|
||||
unsigned parallel_dirops:1;
|
||||
|
||||
/** handle fs handles killing suid/sgid/cap on write/chown/trunc */
|
||||
/**
|
||||
* @handle_killpriv: handle fs handles killing suid/sgid/cap on
|
||||
* write/chown/trunc
|
||||
*/
|
||||
unsigned handle_killpriv:1;
|
||||
|
||||
/** cache READLINK responses in page cache */
|
||||
/** @cache_symlinks: cache READLINK responses in page cache */
|
||||
unsigned cache_symlinks:1;
|
||||
|
||||
/* show legacy mount options */
|
||||
/** @legacy_opts_show: show legacy mount options */
|
||||
unsigned int legacy_opts_show:1;
|
||||
|
||||
/*
|
||||
/**
|
||||
* @handle_killpriv_v2:
|
||||
* fs kills suid/sgid/cap on write/chown/trunc. suid is killed on
|
||||
* write/trunc only if caller did not have CAP_FSETID. sgid is killed
|
||||
* on write/truncate only if caller did not have CAP_FSETID as well as
|
||||
|
|
@ -480,196 +545,217 @@ struct fuse_conn {
|
|||
* and hence races in setting them will not cause malfunction
|
||||
*/
|
||||
|
||||
/** Is open/release not implemented by fs? */
|
||||
/** @no_open: Is open/release not implemented by fs? */
|
||||
unsigned no_open:1;
|
||||
|
||||
/** Is opendir/releasedir not implemented by fs? */
|
||||
/** @no_opendir: Is opendir/releasedir not implemented by fs? */
|
||||
unsigned no_opendir:1;
|
||||
|
||||
/** Is fsync not implemented by fs? */
|
||||
/** @no_fsync: Is fsync not implemented by fs? */
|
||||
unsigned no_fsync:1;
|
||||
|
||||
/** Is fsyncdir not implemented by fs? */
|
||||
/** @no_fsyncdir: Is fsyncdir not implemented by fs? */
|
||||
unsigned no_fsyncdir:1;
|
||||
|
||||
/** Is flush not implemented by fs? */
|
||||
/** @no_flush: Is flush not implemented by fs? */
|
||||
unsigned no_flush:1;
|
||||
|
||||
/** Is setxattr not implemented by fs? */
|
||||
/** @no_setxattr: Is setxattr not implemented by fs? */
|
||||
unsigned no_setxattr:1;
|
||||
|
||||
/** Does file server support extended setxattr */
|
||||
/** @setxattr_ext: Does file server support extended setxattr */
|
||||
unsigned setxattr_ext:1;
|
||||
|
||||
/** Is getxattr not implemented by fs? */
|
||||
/** @no_getxattr: Is getxattr not implemented by fs? */
|
||||
unsigned no_getxattr:1;
|
||||
|
||||
/** Is listxattr not implemented by fs? */
|
||||
/** @no_listxattr: Is listxattr not implemented by fs? */
|
||||
unsigned no_listxattr:1;
|
||||
|
||||
/** Is removexattr not implemented by fs? */
|
||||
/** @no_removexattr: Is removexattr not implemented by fs? */
|
||||
unsigned no_removexattr:1;
|
||||
|
||||
/** Are posix file locking primitives not implemented by fs? */
|
||||
/** @no_lock: Are posix file locking primitives not implemented by fs? */
|
||||
unsigned no_lock:1;
|
||||
|
||||
/** Is access not implemented by fs? */
|
||||
/** @no_access: Is access not implemented by fs? */
|
||||
unsigned no_access:1;
|
||||
|
||||
/** Is create not implemented by fs? */
|
||||
/** @no_create: Is create not implemented by fs? */
|
||||
unsigned no_create:1;
|
||||
|
||||
/** Is bmap not implemented by fs? */
|
||||
/** @no_bmap: Is bmap not implemented by fs? */
|
||||
unsigned no_bmap:1;
|
||||
|
||||
/** Is poll not implemented by fs? */
|
||||
/** @no_poll: Is poll not implemented by fs? */
|
||||
unsigned no_poll:1;
|
||||
|
||||
/** Do multi-page cached writes */
|
||||
/** @big_writes: Do multi-page cached writes */
|
||||
unsigned big_writes:1;
|
||||
|
||||
/** Don't apply umask to creation modes */
|
||||
/** @dont_mask: Don't apply umask to creation modes */
|
||||
unsigned dont_mask:1;
|
||||
|
||||
/** Are BSD file locking primitives not implemented by fs? */
|
||||
/** @no_flock: Are BSD file locking primitives not implemented by fs? */
|
||||
unsigned no_flock:1;
|
||||
|
||||
/** Is fallocate not implemented by fs? */
|
||||
/** @no_fallocate: Is fallocate not implemented by fs? */
|
||||
unsigned no_fallocate:1;
|
||||
|
||||
/** Is rename with flags implemented by fs? */
|
||||
/** @no_rename2: Is rename with flags implemented by fs? */
|
||||
unsigned no_rename2:1;
|
||||
|
||||
/** Use enhanced/automatic page cache invalidation. */
|
||||
/** @auto_inval_data: Use enhanced/automatic page cache invalidation. */
|
||||
unsigned auto_inval_data:1;
|
||||
|
||||
/** Filesystem is fully responsible for page cache invalidation. */
|
||||
/**
|
||||
* @explicit_inval_data: Filesystem is fully responsible for page cache
|
||||
* invalidation.
|
||||
*/
|
||||
unsigned explicit_inval_data:1;
|
||||
|
||||
/** Does the filesystem support readdirplus? */
|
||||
/** @do_readdirplus: Does the filesystem support readdirplus? */
|
||||
unsigned do_readdirplus:1;
|
||||
|
||||
/** Does the filesystem want adaptive readdirplus? */
|
||||
/** @readdirplus_auto: Does the filesystem want adaptive readdirplus? */
|
||||
unsigned readdirplus_auto:1;
|
||||
|
||||
/** Does the filesystem support asynchronous direct-IO submission? */
|
||||
/**
|
||||
* @async_dio: Does the filesystem support asynchronous direct-IO
|
||||
* submission?
|
||||
*/
|
||||
unsigned async_dio:1;
|
||||
|
||||
/** Is lseek not implemented by fs? */
|
||||
/** @no_lseek: Is lseek not implemented by fs? */
|
||||
unsigned no_lseek:1;
|
||||
|
||||
/** Does the filesystem support posix acls? */
|
||||
/** @posix_acl: Does the filesystem support posix acls? */
|
||||
unsigned posix_acl:1;
|
||||
|
||||
/** Check permissions based on the file mode or not? */
|
||||
/**
|
||||
* @default_permissions: Check permissions based on the file mode
|
||||
* or not?
|
||||
*/
|
||||
unsigned default_permissions:1;
|
||||
|
||||
/** Allow other than the mounter user to access the filesystem ? */
|
||||
/**
|
||||
* @allow_other: Allow other than the mounter user to access the
|
||||
* filesystem ?
|
||||
*/
|
||||
unsigned allow_other:1;
|
||||
|
||||
/** Does the filesystem support copy_file_range? */
|
||||
/** @no_copy_file_range: Does the filesystem support copy_file_range? */
|
||||
unsigned no_copy_file_range:1;
|
||||
|
||||
/** Does the filesystem support copy_file_range_64? */
|
||||
/**
|
||||
* @no_copy_file_range_64: Does the filesystem support
|
||||
* copy_file_range_64?
|
||||
*/
|
||||
unsigned no_copy_file_range_64:1;
|
||||
|
||||
/* Send DESTROY request */
|
||||
/** @destroy: Send DESTROY request */
|
||||
unsigned int destroy:1;
|
||||
|
||||
/* Delete dentries that have gone stale */
|
||||
/** @delete_stale: Delete dentries that have gone stale */
|
||||
unsigned int delete_stale:1;
|
||||
|
||||
/** Do not create entry in fusectl fs */
|
||||
/** @no_control: Do not create entry in fusectl fs */
|
||||
unsigned int no_control:1;
|
||||
|
||||
/** Do not allow MNT_FORCE umount */
|
||||
/** @no_force_umount: Do not allow MNT_FORCE umount */
|
||||
unsigned int no_force_umount:1;
|
||||
|
||||
/* Auto-mount submounts announced by the server */
|
||||
/** @auto_submounts: Auto-mount submounts announced by the server */
|
||||
unsigned int auto_submounts:1;
|
||||
|
||||
/* Propagate syncfs() to server */
|
||||
/** @sync_fs: Propagate syncfs() to server */
|
||||
unsigned int sync_fs:1;
|
||||
|
||||
/* Initialize security xattrs when creating a new inode */
|
||||
/** @init_security: Initialize security xattrs when creating a new inode */
|
||||
unsigned int init_security:1;
|
||||
|
||||
/* Add supplementary group info when creating a new inode */
|
||||
/**
|
||||
* @create_supp_group: Add supplementary group info when creating
|
||||
* a new inode
|
||||
*/
|
||||
unsigned int create_supp_group:1;
|
||||
|
||||
/* Does the filesystem support per inode DAX? */
|
||||
/** @inode_dax: Does the filesystem support per inode DAX? */
|
||||
unsigned int inode_dax:1;
|
||||
|
||||
/* Is tmpfile not implemented by fs? */
|
||||
/** @no_tmpfile: Is tmpfile not implemented by fs? */
|
||||
unsigned int no_tmpfile:1;
|
||||
|
||||
/* Relax restrictions to allow shared mmap in FOPEN_DIRECT_IO mode */
|
||||
/**
|
||||
* @direct_io_allow_mmap: Relax restrictions to allow shared mmap
|
||||
* in FOPEN_DIRECT_IO mode
|
||||
*/
|
||||
unsigned int direct_io_allow_mmap:1;
|
||||
|
||||
/* Is statx not implemented by fs? */
|
||||
/** @no_statx: Is statx not implemented by fs? */
|
||||
unsigned int no_statx:1;
|
||||
|
||||
/** Passthrough support for read/write IO */
|
||||
/** @passthrough: Passthrough support for read/write IO */
|
||||
unsigned int passthrough:1;
|
||||
|
||||
/* Use pages instead of pointer for kernel I/O */
|
||||
/** @use_pages_for_kvec_io: Use pages instead of pointer for kernel I/O */
|
||||
unsigned int use_pages_for_kvec_io:1;
|
||||
|
||||
/* Is link not implemented by fs? */
|
||||
/** @no_link: Is link not implemented by fs? */
|
||||
unsigned int no_link:1;
|
||||
|
||||
/* Is synchronous FUSE_INIT allowed? */
|
||||
/** @sync_init: Is synchronous FUSE_INIT allowed? */
|
||||
unsigned int sync_init:1;
|
||||
|
||||
/** Maximum stack depth for passthrough backing files */
|
||||
/** @max_stack_depth: Maximum stack depth for passthrough backing files */
|
||||
int max_stack_depth;
|
||||
|
||||
/** Negotiated minor version */
|
||||
/** @minor: Negotiated minor version */
|
||||
unsigned minor;
|
||||
|
||||
/** Entry on the fuse_conn_list */
|
||||
/** @entry: Entry on the fuse_conn_list */
|
||||
struct list_head entry;
|
||||
|
||||
/** Device ID from the root super block */
|
||||
/** @dev: Device ID from the root super block */
|
||||
dev_t dev;
|
||||
|
||||
/** Key for lock owner ID scrambling */
|
||||
/** @scramble_key: Key for lock owner ID scrambling */
|
||||
u32 scramble_key[4];
|
||||
|
||||
/** Version counter for attribute changes */
|
||||
/** @attr_version: Version counter for attribute changes */
|
||||
atomic64_t attr_version;
|
||||
|
||||
/** Version counter for evict inode */
|
||||
/** @evict_ctr: Version counter for evict inode */
|
||||
atomic64_t evict_ctr;
|
||||
|
||||
/* maximum file name length */
|
||||
/** @name_max: maximum file name length */
|
||||
u32 name_max;
|
||||
|
||||
/** Called on final put */
|
||||
/** @release: Called on final put */
|
||||
void (*release)(struct fuse_conn *);
|
||||
|
||||
/**
|
||||
* Read/write semaphore to hold when accessing the sb of any
|
||||
* @killsb: Read/write semaphore to hold when accessing the sb of any
|
||||
* fuse_mount belonging to this connection
|
||||
*/
|
||||
struct rw_semaphore killsb;
|
||||
|
||||
#ifdef CONFIG_FUSE_DAX
|
||||
/* Dax mode */
|
||||
/** @dax_mode: Dax mode */
|
||||
enum fuse_dax_mode dax_mode;
|
||||
|
||||
/* Dax specific conn data, non-NULL if DAX is enabled */
|
||||
/** @dax: Dax specific conn data, non-NULL if DAX is enabled */
|
||||
struct fuse_conn_dax *dax;
|
||||
#endif
|
||||
|
||||
/** List of filesystems using this connection */
|
||||
/** @mounts: List of filesystems using this connection */
|
||||
struct list_head mounts;
|
||||
|
||||
/* New writepages go into this bucket */
|
||||
/** @curr_bucket: New writepages go into this bucket */
|
||||
struct fuse_sync_bucket __rcu *curr_bucket;
|
||||
|
||||
#ifdef CONFIG_FUSE_PASSTHROUGH
|
||||
/** IDR for backing files ids */
|
||||
/** @backing_files_map: IDR for backing files ids */
|
||||
struct idr backing_files_map;
|
||||
#endif
|
||||
};
|
||||
|
|
@ -814,7 +900,7 @@ extern const struct file_operations fuse_dev_operations;
|
|||
|
||||
extern const struct dentry_operations fuse_dentry_operations;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Get a filled in inode
|
||||
*/
|
||||
struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
|
||||
|
|
@ -856,44 +942,44 @@ int fuse_finish_open(struct inode *inode, struct file *file);
|
|||
void fuse_sync_release(struct fuse_inode *fi, struct fuse_file *ff,
|
||||
unsigned int flags);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Send RELEASE or RELEASEDIR request
|
||||
*/
|
||||
void fuse_release_common(struct file *file, bool isdir);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Send FSYNC or FSYNCDIR request
|
||||
*/
|
||||
int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
|
||||
int datasync, int opcode);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Notify poll wakeup
|
||||
*/
|
||||
int fuse_notify_poll_wakeup(struct fuse_conn *fc,
|
||||
struct fuse_notify_poll_wakeup_out *outarg);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Initialize file operations on a regular file
|
||||
*/
|
||||
void fuse_init_file_inode(struct inode *inode, unsigned int flags);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Initialize inode operations on regular files and special files
|
||||
*/
|
||||
void fuse_init_common(struct inode *inode);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Initialize inode and file operations on a directory
|
||||
*/
|
||||
void fuse_init_dir(struct inode *inode);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Initialize inode operations on a symlink
|
||||
*/
|
||||
void fuse_init_symlink(struct inode *inode);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Change attributes of an inode
|
||||
*/
|
||||
void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
|
||||
|
|
@ -910,7 +996,7 @@ u32 fuse_get_cache_mask(struct inode *inode);
|
|||
int fuse_ctl_init(void);
|
||||
void __exit fuse_ctl_cleanup(void);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Simple request sending that does request allocation and freeing
|
||||
*/
|
||||
ssize_t __fuse_simple_request(struct mnt_idmap *idmap,
|
||||
|
|
@ -938,7 +1024,7 @@ void fuse_dentry_tree_cleanup(void);
|
|||
|
||||
void fuse_epoch_work(struct work_struct *work);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Invalidate inode attributes
|
||||
*/
|
||||
|
||||
|
|
@ -961,7 +1047,7 @@ u64 fuse_time_to_jiffies(u64 sec, u32 nsec);
|
|||
|
||||
void fuse_change_entry_timeout(struct dentry *entry, struct fuse_entry_out *o);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Initialize fuse_conn
|
||||
*/
|
||||
void fuse_conn_init(struct fuse_conn *fc, struct fuse_mount *fm,
|
||||
|
|
@ -970,16 +1056,17 @@ void fuse_conn_init(struct fuse_conn *fc, struct fuse_mount *fm,
|
|||
int fuse_send_init(struct fuse_mount *fm);
|
||||
|
||||
/**
|
||||
* Fill in superblock and initialize fuse connection
|
||||
* fuse_fill_super_common - Fill in superblock and initialize fuse connection
|
||||
* @sb: partially-initialized superblock to fill in
|
||||
* @ctx: mount context
|
||||
*/
|
||||
int fuse_fill_super_common(struct super_block *sb, struct fuse_fs_context *ctx);
|
||||
|
||||
/*
|
||||
* Remove the mount from the connection
|
||||
/**
|
||||
* fuse_mount_remove - Remove the mount from the connection
|
||||
* @fm: fuse_mount to remove
|
||||
*
|
||||
* Returns whether this was the last mount
|
||||
* Returns: whether this was the last mount
|
||||
*/
|
||||
bool fuse_mount_remove(struct fuse_mount *fm);
|
||||
|
||||
|
|
@ -997,23 +1084,25 @@ void fuse_conn_destroy(struct fuse_mount *fm);
|
|||
void fuse_mount_destroy(struct fuse_mount *fm);
|
||||
|
||||
/**
|
||||
* Add connection to control filesystem
|
||||
* fuse_ctl_add_conn - Add connection to control filesystem
|
||||
* @fc: Fuse connection to add
|
||||
*/
|
||||
int fuse_ctl_add_conn(struct fuse_conn *fc);
|
||||
|
||||
/**
|
||||
* Remove connection from control filesystem
|
||||
* fuse_ctl_remove_conn - Remove connection from control filesystem
|
||||
* @fc: Fuse connection to remove
|
||||
*/
|
||||
void fuse_ctl_remove_conn(struct fuse_conn *fc);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Is file type valid?
|
||||
*/
|
||||
int fuse_valid_type(int m);
|
||||
|
||||
bool fuse_invalid_attr(struct fuse_attr *attr);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Is current process allowed to perform filesystem operation?
|
||||
*/
|
||||
bool fuse_allow_current_process(struct fuse_conn *fc);
|
||||
|
|
@ -1030,7 +1119,7 @@ void fuse_flush_writepages(struct inode *inode);
|
|||
void fuse_set_nowrite(struct inode *inode);
|
||||
void fuse_release_nowrite(struct inode *inode);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Scan all fuse_mounts belonging to fc to find the first where
|
||||
* ilookup5() returns a result. Return that result and the
|
||||
* respective fuse_mount in *fm (unless fm is NULL).
|
||||
|
|
@ -1040,13 +1129,13 @@ void fuse_release_nowrite(struct inode *inode);
|
|||
struct inode *fuse_ilookup(struct fuse_conn *fc, u64 nodeid,
|
||||
struct fuse_mount **fm);
|
||||
|
||||
/**
|
||||
/*
|
||||
* File-system tells the kernel to invalidate cache for the given node id.
|
||||
*/
|
||||
int fuse_reverse_inval_inode(struct fuse_conn *fc, u64 nodeid,
|
||||
loff_t offset, loff_t len);
|
||||
|
||||
/**
|
||||
/*
|
||||
* File-system tells the kernel to invalidate parent attributes and
|
||||
* the dentry matching parent/name.
|
||||
*
|
||||
|
|
@ -1068,7 +1157,7 @@ void fuse_try_prune_one_inode(struct fuse_conn *fc, u64 nodeid);
|
|||
int fuse_do_open(struct fuse_mount *fm, u64 nodeid, struct file *file,
|
||||
bool isdir);
|
||||
|
||||
/**
|
||||
/*
|
||||
* fuse_direct_io() flags
|
||||
*/
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user