Commit 919e2bb8 authored by Jonathan Corbet's avatar Jonathan Corbet

Merge branch 'mauro' into docs-next

Mauro says:

This is the second part of a series I wrote sometime ago where I manually
convert lots of files to be properly parsed by Sphinx as ReST files.

As it touches on lot of stuff, this series is based on today's linux-next,
at tag next-20190617.

The first version of this series had 57 patches. The first part with 28 patches
were already merged. Right now, there are still ~76  patches pending applying
(including this series), and that's because I opted to do ~1 patch per converted
 directory.

That sounds too much to be send on a single round. So, I'm opting to split
it on 3 parts for the conversion, plus a final patch adding orphaned books
to existing ones.

Those patches should probably be good to be merged either by subsystem
maintainers or via the docs tree.

I opted to mark new files not included yet to the main index.rst (directly or
indirectly) with the :orphan: tag, in order to avoid adding warnings to the
build system. This should be removed after we find a "home" for all
the converted files within the new document tree arrangement, after I
submit the third part.
parents ec43a27f 98264991
...@@ -895,7 +895,7 @@ this sysctl interface anymore. ...@@ -895,7 +895,7 @@ this sysctl interface anymore.
pty pty
=== ===
See Documentation/filesystems/devpts.txt. See Documentation/filesystems/devpts.rst.
randomize_va_space randomize_va_space
......
.. SPDX-License-Identifier: GPL-2.0
=================
Automount Support
=================
Support is available for filesystems that wish to do automounting Support is available for filesystems that wish to do automounting
support (such as kAFS which can be found in fs/afs/ and NFS in support (such as kAFS which can be found in fs/afs/ and NFS in
fs/nfs/). This facility includes allowing in-kernel mounts to be fs/nfs/). This facility includes allowing in-kernel mounts to be
...@@ -5,13 +12,12 @@ performed and mountpoint degradation to be requested. The latter can ...@@ -5,13 +12,12 @@ performed and mountpoint degradation to be requested. The latter can
also be requested by userspace. also be requested by userspace.
====================== In-Kernel Automounting
IN-KERNEL AUTOMOUNTING
====================== ======================
See section "Mount Traps" of Documentation/filesystems/autofs.rst See section "Mount Traps" of Documentation/filesystems/autofs.rst
Then from userspace, you can just do something like: Then from userspace, you can just do something like::
[root@andromeda root]# mount -t afs \#root.afs. /afs [root@andromeda root]# mount -t afs \#root.afs. /afs
[root@andromeda root]# ls /afs [root@andromeda root]# ls /afs
...@@ -21,7 +27,7 @@ Then from userspace, you can just do something like: ...@@ -21,7 +27,7 @@ Then from userspace, you can just do something like:
[root@andromeda root]# ls /afs/cambridge/afsdoc/ [root@andromeda root]# ls /afs/cambridge/afsdoc/
ChangeLog html LICENSE pdf RELNOTES-1.2.2 ChangeLog html LICENSE pdf RELNOTES-1.2.2
And then if you look in the mountpoint catalogue, you'll see something like: And then if you look in the mountpoint catalogue, you'll see something like::
[root@andromeda root]# cat /proc/mounts [root@andromeda root]# cat /proc/mounts
... ...
...@@ -30,8 +36,7 @@ And then if you look in the mountpoint catalogue, you'll see something like: ...@@ -30,8 +36,7 @@ And then if you look in the mountpoint catalogue, you'll see something like:
#afsdoc. /afs/cambridge.redhat.com/afsdoc afs rw 0 0 #afsdoc. /afs/cambridge.redhat.com/afsdoc afs rw 0 0
=========================== Automatic Mountpoint Expiry
AUTOMATIC MOUNTPOINT EXPIRY
=========================== ===========================
Automatic expiration of mountpoints is easy, provided you've mounted the Automatic expiration of mountpoints is easy, provided you've mounted the
...@@ -43,7 +48,8 @@ To do expiration, you need to follow these steps: ...@@ -43,7 +48,8 @@ To do expiration, you need to follow these steps:
hung. hung.
(2) When a new mountpoint is created in the ->d_automount method, add (2) When a new mountpoint is created in the ->d_automount method, add
the mnt to the list using mnt_set_expiry() the mnt to the list using mnt_set_expiry()::
mnt_set_expiry(newmnt, &afs_vfsmounts); mnt_set_expiry(newmnt, &afs_vfsmounts);
(3) When you want mountpoints to be expired, call mark_mounts_for_expiry() (3) When you want mountpoints to be expired, call mark_mounts_for_expiry()
...@@ -70,8 +76,7 @@ and the copies of those that are on an expiration list will be added to the ...@@ -70,8 +76,7 @@ and the copies of those that are on an expiration list will be added to the
same expiration list. same expiration list.
======================= Userspace Driven Expiry
USERSPACE DRIVEN EXPIRY
======================= =======================
As an alternative, it is possible for userspace to request expiry of any As an alternative, it is possible for userspace to request expiry of any
......
.. SPDX-License-Identifier: GPL-2.0
Filesystem Caching
==================
.. toctree::
:maxdepth: 2
fscache
object
backend-api
cachefiles
netfs-api
operations
==================================================== .. SPDX-License-Identifier: GPL-2.0
IN-KERNEL CACHE OBJECT REPRESENTATION AND MANAGEMENT
==================================================== ====================================================
In-Kernel Cache Object Representation and Management
====================================================
By: David Howells <dhowells@redhat.com> By: David Howells <dhowells@redhat.com>
Contents: .. Contents:
(*) Representation (*) Representation
...@@ -18,8 +20,7 @@ Contents: ...@@ -18,8 +20,7 @@ Contents:
(*) The set of events. (*) The set of events.
============== Representation
REPRESENTATION
============== ==============
FS-Cache maintains an in-kernel representation of each object that a netfs is FS-Cache maintains an in-kernel representation of each object that a netfs is
...@@ -38,7 +39,7 @@ or even by no objects (it may not be cached). ...@@ -38,7 +39,7 @@ or even by no objects (it may not be cached).
Furthermore, both cookies and objects are hierarchical. The two hierarchies Furthermore, both cookies and objects are hierarchical. The two hierarchies
correspond, but the cookies tree is a superset of the union of the object trees correspond, but the cookies tree is a superset of the union of the object trees
of multiple caches: of multiple caches::
NETFS INDEX TREE : CACHE 1 : CACHE 2 NETFS INDEX TREE : CACHE 1 : CACHE 2
: : : :
...@@ -89,8 +90,7 @@ pointers to the cookies. The cookies themselves and any objects attached to ...@@ -89,8 +90,7 @@ pointers to the cookies. The cookies themselves and any objects attached to
those cookies are hidden from it. those cookies are hidden from it.
=============================== Object Management State Machine
OBJECT MANAGEMENT STATE MACHINE
=============================== ===============================
Within FS-Cache, each active object is managed by its own individual state Within FS-Cache, each active object is managed by its own individual state
...@@ -124,7 +124,7 @@ is not masked, the object will be queued for processing (by calling ...@@ -124,7 +124,7 @@ is not masked, the object will be queued for processing (by calling
fscache_enqueue_object()). fscache_enqueue_object()).
PROVISION OF CPU TIME Provision of CPU Time
--------------------- ---------------------
The work to be done by the various states was given CPU time by the threads of The work to be done by the various states was given CPU time by the threads of
...@@ -141,7 +141,7 @@ because: ...@@ -141,7 +141,7 @@ because:
workqueues don't necessarily have the right numbers of threads. workqueues don't necessarily have the right numbers of threads.
LOCKING SIMPLIFICATION Locking Simplification
---------------------- ----------------------
Because only one worker thread may be operating on any particular object's Because only one worker thread may be operating on any particular object's
...@@ -151,8 +151,7 @@ from the cache backend's representation (fscache_object) - which may be ...@@ -151,8 +151,7 @@ from the cache backend's representation (fscache_object) - which may be
requested from either end. requested from either end.
================= The Set of States
THE SET OF STATES
================= =================
The object state machine has a set of states that it can be in. There are The object state machine has a set of states that it can be in. There are
...@@ -275,19 +274,17 @@ memory and potentially deletes stuff from disk: ...@@ -275,19 +274,17 @@ memory and potentially deletes stuff from disk:
this state. this state.
THE SET OF EVENTS The Set of Events
----------------- -----------------
There are a number of events that can be raised to an object state machine: There are a number of events that can be raised to an object state machine:
(*) FSCACHE_OBJECT_EV_UPDATE FSCACHE_OBJECT_EV_UPDATE
The netfs requested that an object be updated. The state machine will ask The netfs requested that an object be updated. The state machine will ask
the cache backend to update the object, and the cache backend will ask the the cache backend to update the object, and the cache backend will ask the
netfs for details of the change through its cookie definition ops. netfs for details of the change through its cookie definition ops.
(*) FSCACHE_OBJECT_EV_CLEARED FSCACHE_OBJECT_EV_CLEARED
This is signalled in two circumstances: This is signalled in two circumstances:
(a) when an object's last child object is dropped and (a) when an object's last child object is dropped and
...@@ -296,20 +293,16 @@ There are a number of events that can be raised to an object state machine: ...@@ -296,20 +293,16 @@ There are a number of events that can be raised to an object state machine:
This is used to proceed from the dying state. This is used to proceed from the dying state.
(*) FSCACHE_OBJECT_EV_ERROR FSCACHE_OBJECT_EV_ERROR
This is signalled when an I/O error occurs during the processing of some This is signalled when an I/O error occurs during the processing of some
object. object.
(*) FSCACHE_OBJECT_EV_RELEASE FSCACHE_OBJECT_EV_RELEASE, FSCACHE_OBJECT_EV_RETIRE
(*) FSCACHE_OBJECT_EV_RETIRE
These are signalled when the netfs relinquishes a cookie it was using. These are signalled when the netfs relinquishes a cookie it was using.
The event selected depends on whether the netfs asks for the backing The event selected depends on whether the netfs asks for the backing
object to be retired (deleted) or retained. object to be retired (deleted) or retained.
(*) FSCACHE_OBJECT_EV_WITHDRAW FSCACHE_OBJECT_EV_WITHDRAW
This is signalled when the cache backend wants to withdraw an object. This is signalled when the cache backend wants to withdraw an object.
This means that the object will have to be detached from the netfs's This means that the object will have to be detached from the netfs's
cookie. cookie.
......
================================ .. SPDX-License-Identifier: GPL-2.0
ASYNCHRONOUS OPERATIONS HANDLING
================================ ================================
Asynchronous Operations Handling
================================
By: David Howells <dhowells@redhat.com> By: David Howells <dhowells@redhat.com>
Contents: .. Contents:
(*) Overview. (*) Overview.
...@@ -17,8 +19,7 @@ Contents: ...@@ -17,8 +19,7 @@ Contents:
(*) Asynchronous callback. (*) Asynchronous callback.
======== Overview
OVERVIEW
======== ========
FS-Cache has an asynchronous operations handling facility that it uses for its FS-Cache has an asynchronous operations handling facility that it uses for its
...@@ -33,11 +34,10 @@ backend for completion. ...@@ -33,11 +34,10 @@ backend for completion.
To make use of this facility, <linux/fscache-cache.h> should be #included. To make use of this facility, <linux/fscache-cache.h> should be #included.
=============================== Operation Record Initialisation
OPERATION RECORD INITIALISATION
=============================== ===============================
An operation is recorded in an fscache_operation struct: An operation is recorded in an fscache_operation struct::
struct fscache_operation { struct fscache_operation {
union { union {
...@@ -50,7 +50,7 @@ An operation is recorded in an fscache_operation struct: ...@@ -50,7 +50,7 @@ An operation is recorded in an fscache_operation struct:
}; };
Someone wanting to issue an operation should allocate something with this Someone wanting to issue an operation should allocate something with this
struct embedded in it. They should initialise it by calling: struct embedded in it. They should initialise it by calling::
void fscache_operation_init(struct fscache_operation *op, void fscache_operation_init(struct fscache_operation *op,
fscache_operation_release_t release); fscache_operation_release_t release);
...@@ -67,8 +67,7 @@ FSCACHE_OP_WAITING may be set in op->flags prior to each submission of the ...@@ -67,8 +67,7 @@ FSCACHE_OP_WAITING may be set in op->flags prior to each submission of the
operation and waited for afterwards. operation and waited for afterwards.
========== Parameters
PARAMETERS
========== ==========
There are a number of parameters that can be set in the operation record's flag There are a number of parameters that can be set in the operation record's flag
...@@ -87,7 +86,7 @@ operations: ...@@ -87,7 +86,7 @@ operations:
If this option is to be used, FSCACHE_OP_WAITING must be set in op->flags If this option is to be used, FSCACHE_OP_WAITING must be set in op->flags
before submitting the operation, and the operating thread must wait for it before submitting the operation, and the operating thread must wait for it
to be cleared before proceeding: to be cleared before proceeding::
wait_on_bit(&op->flags, FSCACHE_OP_WAITING, wait_on_bit(&op->flags, FSCACHE_OP_WAITING,
TASK_UNINTERRUPTIBLE); TASK_UNINTERRUPTIBLE);
...@@ -101,7 +100,7 @@ operations: ...@@ -101,7 +100,7 @@ operations:
page to a netfs page after the backing fs has read the page in. page to a netfs page after the backing fs has read the page in.
If this option is used, op->fast_work and op->processor must be If this option is used, op->fast_work and op->processor must be
initialised before submitting the operation: initialised before submitting the operation::
INIT_WORK(&op->fast_work, do_some_work); INIT_WORK(&op->fast_work, do_some_work);
...@@ -114,7 +113,7 @@ operations: ...@@ -114,7 +113,7 @@ operations:
pages that have just been fetched from a remote server. pages that have just been fetched from a remote server.
If this option is used, op->slow_work and op->processor must be If this option is used, op->slow_work and op->processor must be
initialised before submitting the operation: initialised before submitting the operation::
fscache_operation_init_slow(op, processor) fscache_operation_init_slow(op, processor)
...@@ -132,8 +131,7 @@ Furthermore, operations may be one of two types: ...@@ -132,8 +131,7 @@ Furthermore, operations may be one of two types:
operations running at the same time. operations running at the same time.
========= Procedure
PROCEDURE
========= =========
Operations are used through the following procedure: Operations are used through the following procedure:
...@@ -143,7 +141,7 @@ Operations are used through the following procedure: ...@@ -143,7 +141,7 @@ Operations are used through the following procedure:
generic op embedded within. generic op embedded within.
(2) The submitting thread must then submit the operation for processing using (2) The submitting thread must then submit the operation for processing using
one of the following two functions: one of the following two functions::
int fscache_submit_op(struct fscache_object *object, int fscache_submit_op(struct fscache_object *object,
struct fscache_operation *op); struct fscache_operation *op);
...@@ -164,7 +162,7 @@ Operations are used through the following procedure: ...@@ -164,7 +162,7 @@ Operations are used through the following procedure:
operation of conflicting exclusivity is in progress on the object. operation of conflicting exclusivity is in progress on the object.
If the operation is asynchronous, the manager will retain a reference to If the operation is asynchronous, the manager will retain a reference to
it, so the caller should put their reference to it by passing it to: it, so the caller should put their reference to it by passing it to::
void fscache_put_operation(struct fscache_operation *op); void fscache_put_operation(struct fscache_operation *op);
...@@ -179,12 +177,12 @@ Operations are used through the following procedure: ...@@ -179,12 +177,12 @@ Operations are used through the following procedure:
(4) The operation holds an effective lock upon the object, preventing other (4) The operation holds an effective lock upon the object, preventing other
exclusive ops conflicting until it is released. The operation can be exclusive ops conflicting until it is released. The operation can be
enqueued for further immediate asynchronous processing by adjusting the enqueued for further immediate asynchronous processing by adjusting the
CPU time provisioning option if necessary, eg: CPU time provisioning option if necessary, eg::
op->flags &= ~FSCACHE_OP_TYPE; op->flags &= ~FSCACHE_OP_TYPE;
op->flags |= ~FSCACHE_OP_FAST; op->flags |= ~FSCACHE_OP_FAST;
and calling: and calling::
void fscache_enqueue_operation(struct fscache_operation *op) void fscache_enqueue_operation(struct fscache_operation *op)
...@@ -192,13 +190,12 @@ Operations are used through the following procedure: ...@@ -192,13 +190,12 @@ Operations are used through the following procedure:
pools. pools.
===================== Asynchronous Callback
ASYNCHRONOUS CALLBACK
===================== =====================
When used in asynchronous mode, the worker thread pool will invoke the When used in asynchronous mode, the worker thread pool will invoke the
processor method with a pointer to the operation. This should then get at the processor method with a pointer to the operation. This should then get at the
container struct by using container_of(): container struct by using container_of()::
static void fscache_write_op(struct fscache_operation *_op) static void fscache_write_op(struct fscache_operation *_op)
{ {
......
.. SPDX-License-Identifier: GPL-2.0
===========================================
Mounting root file system via SMB (cifs.ko) Mounting root file system via SMB (cifs.ko)
=========================================== ===========================================
Written 2019 by Paulo Alcantara <palcantara@suse.de> Written 2019 by Paulo Alcantara <palcantara@suse.de>
Written 2019 by Aurelien Aptel <aaptel@suse.com> Written 2019 by Aurelien Aptel <aaptel@suse.com>
The CONFIG_CIFS_ROOT option enables experimental root file system The CONFIG_CIFS_ROOT option enables experimental root file system
...@@ -32,7 +36,7 @@ Server configuration ...@@ -32,7 +36,7 @@ Server configuration
==================== ====================
To enable SMB1+UNIX extensions you will need to set these global To enable SMB1+UNIX extensions you will need to set these global
settings in Samba smb.conf: settings in Samba smb.conf::
[global] [global]
server min protocol = NT1 server min protocol = NT1
...@@ -41,12 +45,16 @@ settings in Samba smb.conf: ...@@ -41,12 +45,16 @@ settings in Samba smb.conf:
Kernel command line Kernel command line
=================== ===================
root=/dev/cifs ::
root=/dev/cifs
This is just a virtual device that basically tells the kernel to mount This is just a virtual device that basically tells the kernel to mount
the root file system via SMB protocol. the root file system via SMB protocol.
cifsroot=//<server-ip>/<share>[,options] ::
cifsroot=//<server-ip>/<share>[,options]
Enables the kernel to mount the root file system via SMB that are Enables the kernel to mount the root file system via SMB that are
located in the <server-ip> and <share> specified in this option. located in the <server-ip> and <share> specified in this option.
...@@ -65,10 +73,10 @@ options ...@@ -65,10 +73,10 @@ options
Examples Examples
======== ========
Export root file system as a Samba share in smb.conf file. Export root file system as a Samba share in smb.conf file::
... ...
[linux] [linux]
path = /path/to/rootfs path = /path/to/rootfs
read only = no read only = no
guest ok = yes guest ok = yes
...@@ -80,16 +88,16 @@ Export root file system as a Samba share in smb.conf file. ...@@ -80,16 +88,16 @@ Export root file system as a Samba share in smb.conf file.
public = yes public = yes
create mask = 0777 create mask = 0777
directory mask = 0777 directory mask = 0777
... ...
Restart smb service. Restart smb service::
# systemctl restart smb # systemctl restart smb
Test it under QEMU on a kernel built with CONFIG_CIFS_ROOT and Test it under QEMU on a kernel built with CONFIG_CIFS_ROOT and
CONFIG_IP_PNP options enabled. CONFIG_IP_PNP options enabled::
# qemu-system-x86_64 -enable-kvm -cpu host -m 1024 \ # qemu-system-x86_64 -enable-kvm -cpu host -m 1024 \
-kernel /path/to/linux/arch/x86/boot/bzImage -nographic \ -kernel /path/to/linux/arch/x86/boot/bzImage -nographic \
-append "root=/dev/cifs rw ip=dhcp cifsroot=//10.0.2.2/linux,username=foo,password=bar console=ttyS0 3" -append "root=/dev/cifs rw ip=dhcp cifsroot=//10.0.2.2/linux,username=foo,password=bar console=ttyS0 3"
......
.. SPDX-License-Identifier: GPL-2.0
=====================
The Devpts Filesystem
=====================
Each mount of the devpts filesystem is now distinct such that ptys
and their indicies allocated in one mount are independent from ptys
and their indicies in all other mounts.
All mounts of the devpts filesystem now create a ``/dev/pts/ptmx`` node
with permissions ``0000``.
To retain backwards compatibility the a ptmx device node (aka any node
created with ``mknod name c 5 2``) when opened will look for an instance
of devpts under the name ``pts`` in the same directory as the ptmx device
node.
As an option instead of placing a ``/dev/ptmx`` device node at ``/dev/ptmx``
it is possible to place a symlink to ``/dev/pts/ptmx`` at ``/dev/ptmx`` or
to bind mount ``/dev/ptx/ptmx`` to ``/dev/ptmx``. If you opt for using
the devpts filesystem in this manner devpts should be mounted with
the ``ptmxmode=0666``, or ``chmod 0666 /dev/pts/ptmx`` should be called.
Total count of pty pairs in all instances is limited by sysctls::
kernel.pty.max = 4096 - global limit
kernel.pty.reserve = 1024 - reserved for filesystems mounted from the initial mount namespace
kernel.pty.nr - current count of ptys
Per-instance limit could be set by adding mount option ``max=<count>``.
This feature was added in kernel 3.4 together with
``sysctl kernel.pty.reserve``.
In kernels older than 3.4 sysctl ``kernel.pty.max`` works as per-instance limit.
Each mount of the devpts filesystem is now distinct such that ptys
and their indicies allocated in one mount are independent from ptys
and their indicies in all other mounts.
All mounts of the devpts filesystem now create a /dev/pts/ptmx node
with permissions 0000.
To retain backwards compatibility the a ptmx device node (aka any node
created with "mknod name c 5 2") when opened will look for an instance
of devpts under the name "pts" in the same directory as the ptmx device
node.
As an option instead of placing a /dev/ptmx device node at /dev/ptmx
it is possible to place a symlink to /dev/pts/ptmx at /dev/ptmx or
to bind mount /dev/ptx/ptmx to /dev/ptmx. If you opt for using
the devpts filesystem in this manner devpts should be mounted with
the ptmxmode=0666, or chmod 0666 /dev/pts/ptmx should be called.
Total count of pty pairs in all instances is limited by sysctls:
kernel.pty.max = 4096 - global limit
kernel.pty.reserve = 1024 - reserved for filesystems mounted from the initial mount namespace
kernel.pty.nr - current count of ptys
Per-instance limit could be set by adding mount option "max=<count>".
This feature was added in kernel 3.4 together with sysctl kernel.pty.reserve.
In kernels older than 3.4 sysctl kernel.pty.max works as per-instance limit.
Linux Directory Notification .. SPDX-License-Identifier: GPL-2.0
============================
============================
Linux Directory Notification
============================
Stephen Rothwell <sfr@canb.auug.org.au> Stephen Rothwell <sfr@canb.auug.org.au>
...@@ -12,6 +15,7 @@ being delivered using signals. ...@@ -12,6 +15,7 @@ being delivered using signals.
The application decides which "events" it wants to be notified about. The application decides which "events" it wants to be notified about.
The currently defined events are: The currently defined events are:
========= =====================================================
DN_ACCESS A file in the directory was accessed (read) DN_ACCESS A file in the directory was accessed (read)
DN_MODIFY A file in the directory was modified (write,truncate) DN_MODIFY A file in the directory was modified (write,truncate)
DN_CREATE A file was created in the directory DN_CREATE A file was created in the directory
...@@ -19,6 +23,7 @@ The currently defined events are: ...@@ -19,6 +23,7 @@ The currently defined events are:
DN_RENAME A file in the directory was renamed DN_RENAME A file in the directory was renamed
DN_ATTRIB A file in the directory had its attributes DN_ATTRIB A file in the directory had its attributes
changed (chmod,chown) changed (chmod,chown)
========= =====================================================
Usually, the application must reregister after each notification, but Usually, the application must reregister after each notification, but
if DN_MULTISHOT is or'ed with the event mask, then the registration will if DN_MULTISHOT is or'ed with the event mask, then the registration will
...@@ -36,7 +41,7 @@ especially important if DN_MULTISHOT is specified. Note that SIGRTMIN ...@@ -36,7 +41,7 @@ especially important if DN_MULTISHOT is specified. Note that SIGRTMIN
is often blocked, so it is better to use (at least) SIGRTMIN + 1. is often blocked, so it is better to use (at least) SIGRTMIN + 1.
Implementation expectations (features and bugs :-)) Implementation expectations (features and bugs :-))
--------------------------- ---------------------------------------------------
The notification should work for any local access to files even if the The notification should work for any local access to files even if the
actual file system is on a remote server. This implies that remote actual file system is on a remote server. This implies that remote
......
.. SPDX-License-Identifier: GPL-2.0
============ ============
Fiemap Ioctl Fiemap Ioctl
============ ============
...@@ -10,9 +12,9 @@ returns a list of extents. ...@@ -10,9 +12,9 @@ returns a list of extents.
Request Basics Request Basics
-------------- --------------
A fiemap request is encoded within struct fiemap: A fiemap request is encoded within struct fiemap::
struct fiemap { struct fiemap {
__u64 fm_start; /* logical offset (inclusive) at __u64 fm_start; /* logical offset (inclusive) at
* which to start mapping (in) */ * which to start mapping (in) */
__u64 fm_length; /* logical length of mapping which __u64 fm_length; /* logical length of mapping which
...@@ -23,7 +25,7 @@ struct fiemap { ...@@ -23,7 +25,7 @@ struct fiemap {
__u32 fm_extent_count; /* size of fm_extents array (in) */ __u32 fm_extent_count; /* size of fm_extents array (in) */
__u32 fm_reserved; __u32 fm_reserved;
struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */ struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
}; };
fm_start, and fm_length specify the logical range within the file fm_start, and fm_length specify the logical range within the file
...@@ -51,12 +53,12 @@ nothing to prevent the file from changing between calls to FIEMAP. ...@@ -51,12 +53,12 @@ nothing to prevent the file from changing between calls to FIEMAP.
The following flags can be set in fm_flags: The following flags can be set in fm_flags:
* FIEMAP_FLAG_SYNC FIEMAP_FLAG_SYNC
If this flag is set, the kernel will sync the file before mapping extents. If this flag is set, the kernel will sync the file before mapping extents.
* FIEMAP_FLAG_XATTR FIEMAP_FLAG_XATTR
If this flag is set, the extents returned will describe the inodes If this flag is set, the extents returned will describe the inodes
extended attribute lookup tree, instead of its data tree. extended attribute lookup tree, instead of its data tree.
Extent Mapping Extent Mapping
...@@ -75,9 +77,9 @@ complete the requested range and will not have the FIEMAP_EXTENT_LAST ...@@ -75,9 +77,9 @@ complete the requested range and will not have the FIEMAP_EXTENT_LAST
flag set (see the next section on extent flags). flag set (see the next section on extent flags).
Each extent is described by a single fiemap_extent structure as Each extent is described by a single fiemap_extent structure as
returned in fm_extents. returned in fm_extents::
struct fiemap_extent { struct fiemap_extent {
__u64 fe_logical; /* logical offset in bytes for the start of __u64 fe_logical; /* logical offset in bytes for the start of
* the extent */ * the extent */
__u64 fe_physical; /* physical offset in bytes for the start __u64 fe_physical; /* physical offset in bytes for the start
...@@ -86,7 +88,7 @@ struct fiemap_extent { ...@@ -86,7 +88,7 @@ struct fiemap_extent {
__u64 fe_reserved64[2]; __u64 fe_reserved64[2];
__u32 fe_flags; /* FIEMAP_EXTENT_* flags for this extent */ __u32 fe_flags; /* FIEMAP_EXTENT_* flags for this extent */
__u32 fe_reserved[3]; __u32 fe_reserved[3];
}; };
All offsets and lengths are in bytes and mirror those on disk. It is valid All offsets and lengths are in bytes and mirror those on disk. It is valid
for an extents logical offset to start before the request or its logical for an extents logical offset to start before the request or its logical
...@@ -114,26 +116,27 @@ worry about all present and future flags which might imply unaligned ...@@ -114,26 +116,27 @@ worry about all present and future flags which might imply unaligned
data. Note that the opposite is not true - it would be valid for data. Note that the opposite is not true - it would be valid for
FIEMAP_EXTENT_NOT_ALIGNED to appear alone. FIEMAP_EXTENT_NOT_ALIGNED to appear alone.
* FIEMAP_EXTENT_LAST FIEMAP_EXTENT_LAST
This is generally the last extent in the file. A mapping attempt past This is generally the last extent in the file. A mapping attempt past
this extent may return nothing. Some implementations set this flag to this extent may return nothing. Some implementations set this flag to
indicate this extent is the last one in the range queried by the user indicate this extent is the last one in the range queried by the user
(via fiemap->fm_length). (via fiemap->fm_length).
FIEMAP_EXTENT_UNKNOWN
The location of this extent is currently unknown. This may indicate
the data is stored on an inaccessible volume or that no storage has
been allocated for the file yet.
* FIEMAP_EXTENT_UNKNOWN FIEMAP_EXTENT_DELALLOC
The location of this extent is currently unknown. This may indicate This will also set FIEMAP_EXTENT_UNKNOWN.
the data is stored on an inaccessible volume or that no storage has
been allocated for the file yet.
* FIEMAP_EXTENT_DELALLOC Delayed allocation - while there is data for this extent, its
- This will also set FIEMAP_EXTENT_UNKNOWN. physical location has not been allocated yet.
Delayed allocation - while there is data for this extent, its
physical location has not been allocated yet.
* FIEMAP_EXTENT_ENCODED FIEMAP_EXTENT_ENCODED
This extent does not consist of plain filesystem blocks but is This extent does not consist of plain filesystem blocks but is
encoded (e.g. encrypted or compressed). Reading the data in this encoded (e.g. encrypted or compressed). Reading the data in this
extent via I/O to the block device will have undefined results. extent via I/O to the block device will have undefined results.
Note that it is *always* undefined to try to update the data Note that it is *always* undefined to try to update the data
in-place by writing to the indicated location without the in-place by writing to the indicated location without the
...@@ -145,32 +148,32 @@ unmounted, and then only if the FIEMAP_EXTENT_ENCODED flag is ...@@ -145,32 +148,32 @@ unmounted, and then only if the FIEMAP_EXTENT_ENCODED flag is
clear; user applications must not try reading or writing to the clear; user applications must not try reading or writing to the
filesystem via the block device under any other circumstances. filesystem via the block device under any other circumstances.
* FIEMAP_EXTENT_DATA_ENCRYPTED FIEMAP_EXTENT_DATA_ENCRYPTED
- This will also set FIEMAP_EXTENT_ENCODED This will also set FIEMAP_EXTENT_ENCODED
The data in this extent has been encrypted by the file system. The data in this extent has been encrypted by the file system.
* FIEMAP_EXTENT_NOT_ALIGNED FIEMAP_EXTENT_NOT_ALIGNED
Extent offsets and length are not guaranteed to be block aligned. Extent offsets and length are not guaranteed to be block aligned.
* FIEMAP_EXTENT_DATA_INLINE FIEMAP_EXTENT_DATA_INLINE
This will also set FIEMAP_EXTENT_NOT_ALIGNED This will also set FIEMAP_EXTENT_NOT_ALIGNED
Data is located within a meta data block. Data is located within a meta data block.
* FIEMAP_EXTENT_DATA_TAIL FIEMAP_EXTENT_DATA_TAIL
This will also set FIEMAP_EXTENT_NOT_ALIGNED This will also set FIEMAP_EXTENT_NOT_ALIGNED
Data is packed into a block with data from other files. Data is packed into a block with data from other files.
* FIEMAP_EXTENT_UNWRITTEN FIEMAP_EXTENT_UNWRITTEN
Unwritten extent - the extent is allocated but its data has not been Unwritten extent - the extent is allocated but its data has not been
initialized. This indicates the extent's data will be all zero if read initialized. This indicates the extent's data will be all zero if read
through the filesystem but the contents are undefined if read directly from through the filesystem but the contents are undefined if read directly from
the device. the device.
* FIEMAP_EXTENT_MERGED FIEMAP_EXTENT_MERGED
This will be set when a file does not support extents, i.e., it uses a block This will be set when a file does not support extents, i.e., it uses a block
based addressing scheme. Since returning an extent for each block back to based addressing scheme. Since returning an extent for each block back to
userspace would be highly inefficient, the kernel will try to merge most userspace would be highly inefficient, the kernel will try to merge most
adjacent blocks into 'extents'. adjacent blocks into 'extents'.
VFS -> File System Implementation VFS -> File System Implementation
...@@ -179,23 +182,23 @@ VFS -> File System Implementation ...@@ -179,23 +182,23 @@ VFS -> File System Implementation
File systems wishing to support fiemap must implement a ->fiemap callback on File systems wishing to support fiemap must implement a ->fiemap callback on
their inode_operations structure. The fs ->fiemap call is responsible for their inode_operations structure. The fs ->fiemap call is responsible for
defining its set of supported fiemap flags, and calling a helper function on defining its set of supported fiemap flags, and calling a helper function on
each discovered extent: each discovered extent::
struct inode_operations { struct inode_operations {
... ...
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
u64 len); u64 len);
->fiemap is passed struct fiemap_extent_info which describes the ->fiemap is passed struct fiemap_extent_info which describes the
fiemap request: fiemap request::
struct fiemap_extent_info { struct fiemap_extent_info {
unsigned int fi_flags; /* Flags as passed from user */ unsigned int fi_flags; /* Flags as passed from user */
unsigned int fi_extents_mapped; /* Number of mapped extents */ unsigned int fi_extents_mapped; /* Number of mapped extents */
unsigned int fi_extents_max; /* Size of fiemap_extent array */ unsigned int fi_extents_max; /* Size of fiemap_extent array */
struct fiemap_extent *fi_extents_start; /* Start of fiemap_extent array */ struct fiemap_extent *fi_extents_start; /* Start of fiemap_extent array */
}; };
It is intended that the file system should not need to access any of this It is intended that the file system should not need to access any of this
structure directly. Filesystem handlers should be tolerant to signals and return structure directly. Filesystem handlers should be tolerant to signals and return
...@@ -203,9 +206,9 @@ EINTR once fatal signal received. ...@@ -203,9 +206,9 @@ EINTR once fatal signal received.
Flag checking should be done at the beginning of the ->fiemap callback via the Flag checking should be done at the beginning of the ->fiemap callback via the
fiemap_check_flags() helper: fiemap_check_flags() helper::
int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags); int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
The struct fieinfo should be passed in as received from ioctl_fiemap(). The The struct fieinfo should be passed in as received from ioctl_fiemap(). The
set of fiemap flags which the fs understands should be passed via fs_flags. If set of fiemap flags which the fs understands should be passed via fs_flags. If
...@@ -216,9 +219,9 @@ ioctl_fiemap(). ...@@ -216,9 +219,9 @@ ioctl_fiemap().
For each extent in the request range, the file system should call For each extent in the request range, the file system should call
the helper function, fiemap_fill_next_extent(): the helper function, fiemap_fill_next_extent()::
int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical, int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
u64 phys, u64 len, u32 flags, u32 dev); u64 phys, u64 len, u32 flags, u32 dev);
fiemap_fill_next_extent() will use the passed values to populate the fiemap_fill_next_extent() will use the passed values to populate the
......
.. SPDX-License-Identifier: GPL-2.0
===================================
File management in the Linux kernel File management in the Linux kernel
----------------------------------- ===================================
This document describes how locking for files (struct file) This document describes how locking for files (struct file)
and file descriptor table (struct files) works. and file descriptor table (struct files) works.
...@@ -34,7 +37,7 @@ appear atomic. Here are the locking rules for ...@@ -34,7 +37,7 @@ appear atomic. Here are the locking rules for
the fdtable structure - the fdtable structure -
1. All references to the fdtable must be done through 1. All references to the fdtable must be done through
the files_fdtable() macro : the files_fdtable() macro::
struct fdtable *fdt; struct fdtable *fdt;
...@@ -61,7 +64,8 @@ the fdtable structure - ...@@ -61,7 +64,8 @@ the fdtable structure -
4. To look up the file structure given an fd, a reader 4. To look up the file structure given an fd, a reader
must use either fcheck() or fcheck_files() APIs. These must use either fcheck() or fcheck_files() APIs. These
take care of barrier requirements due to lock-free lookup. take care of barrier requirements due to lock-free lookup.
An example :
An example::
struct file *file; struct file *file;
...@@ -77,7 +81,7 @@ the fdtable structure - ...@@ -77,7 +81,7 @@ the fdtable structure -
of the fd (fget()/fget_light()) are lock-free, it is possible of the fd (fget()/fget_light()) are lock-free, it is possible
that look-up may race with the last put() operation on the that look-up may race with the last put() operation on the
file structure. This is avoided using atomic_long_inc_not_zero() file structure. This is avoided using atomic_long_inc_not_zero()
on ->f_count : on ->f_count::
rcu_read_lock(); rcu_read_lock();
file = fcheck_files(files, fd); file = fcheck_files(files, fd);
...@@ -106,7 +110,8 @@ the fdtable structure - ...@@ -106,7 +110,8 @@ the fdtable structure -
holding files->file_lock. If ->file_lock is dropped, then holding files->file_lock. If ->file_lock is dropped, then
another thread expand the files thereby creating a new another thread expand the files thereby creating a new
fdtable and making the earlier fdtable pointer stale. fdtable and making the earlier fdtable pointer stale.
For example :
For example::
spin_lock(&files->file_lock); spin_lock(&files->file_lock);
fd = locate_fd(files, file, start); fd = locate_fd(files, file, start);
......
.. SPDX-License-Identifier: GPL-2.0
==============
Fuse I/O Modes
==============
Fuse supports the following I/O modes: Fuse supports the following I/O modes:
- direct-io - direct-io
......
...@@ -24,6 +24,22 @@ algorithms work. ...@@ -24,6 +24,22 @@ algorithms work.
splice splice
locking locking
directory-locking directory-locking
devpts
dnotify
fiemap
files
locks
mandatory-locking
mount_api
quota
seq_file
sharedsubtree
sysfs-pci
sysfs-tagging
automount-support
caching/index
porting porting
...@@ -57,7 +73,10 @@ Documentation for filesystem implementations. ...@@ -57,7 +73,10 @@ Documentation for filesystem implementations.
befs befs
bfs bfs
btrfs btrfs
cifs/cifsroot
ceph ceph
coda
configfs
cramfs cramfs
debugfs debugfs
dlmfs dlmfs
...@@ -73,6 +92,7 @@ Documentation for filesystem implementations. ...@@ -73,6 +92,7 @@ Documentation for filesystem implementations.
hfsplus hfsplus
hpfs hpfs
fuse fuse
fuse-io
inotify inotify
isofs isofs
nilfs2 nilfs2
...@@ -88,6 +108,7 @@ Documentation for filesystem implementations. ...@@ -88,6 +108,7 @@ Documentation for filesystem implementations.
ramfs-rootfs-initramfs ramfs-rootfs-initramfs
relay relay
romfs romfs
spufs/index
squashfs squashfs
sysfs sysfs
sysv-fs sysv-fs
...@@ -97,4 +118,6 @@ Documentation for filesystem implementations. ...@@ -97,4 +118,6 @@ Documentation for filesystem implementations.
udf udf
virtiofs virtiofs
vfat vfat
xfs-delayed-logging-design
xfs-self-describing-metadata
zonefs zonefs
File Locking Release Notes .. SPDX-License-Identifier: GPL-2.0
==========================
File Locking Release Notes
==========================
Andy Walker <andy@lysaker.kvaerner.no> Andy Walker <andy@lysaker.kvaerner.no>
...@@ -6,7 +10,7 @@ ...@@ -6,7 +10,7 @@
1. What's New? 1. What's New?
-------------- ==============
1.1 Broken Flock Emulation 1.1 Broken Flock Emulation
-------------------------- --------------------------
...@@ -25,7 +29,7 @@ anyway (see the file "Documentation/process/changes.rst".) ...@@ -25,7 +29,7 @@ anyway (see the file "Documentation/process/changes.rst".)
--------------------------- ---------------------------
1.2.1 Typical Problems - Sendmail 1.2.1 Typical Problems - Sendmail
--------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Because sendmail was unable to use the old flock() emulation, many sendmail Because sendmail was unable to use the old flock() emulation, many sendmail
installations use fcntl() instead of flock(). This is true of Slackware 3.0 installations use fcntl() instead of flock(). This is true of Slackware 3.0
for example. This gave rise to some other subtle problems if sendmail was for example. This gave rise to some other subtle problems if sendmail was
...@@ -37,7 +41,7 @@ to lock solid with deadlocked processes. ...@@ -37,7 +41,7 @@ to lock solid with deadlocked processes.
1.2.2 The Solution 1.2.2 The Solution
------------------ ^^^^^^^^^^^^^^^^^^
The solution I have chosen, after much experimentation and discussion, The solution I have chosen, after much experimentation and discussion,
is to make flock() and fcntl() locks oblivious to each other. Both can is to make flock() and fcntl() locks oblivious to each other. Both can
exists, and neither will have any effect on the other. exists, and neither will have any effect on the other.
...@@ -54,7 +58,7 @@ fcntl(), with all the problems that implies. ...@@ -54,7 +58,7 @@ fcntl(), with all the problems that implies.
--------------------------------------- ---------------------------------------
Mandatory locking, as described in Mandatory locking, as described in
'Documentation/filesystems/mandatory-locking.txt' was prior to this release a 'Documentation/filesystems/mandatory-locking.rst' was prior to this release a
general configuration option that was valid for all mounted filesystems. This general configuration option that was valid for all mounted filesystems. This
had a number of inherent dangers, not the least of which was the ability to had a number of inherent dangers, not the least of which was the ability to
freeze an NFS server by asking it to read a file for which a mandatory lock freeze an NFS server by asking it to read a file for which a mandatory lock
......
Mandatory File Locking For The Linux Operating System .. SPDX-License-Identifier: GPL-2.0
=====================================================
Mandatory File Locking For The Linux Operating System
=====================================================
Andy Walker <andy@lysaker.kvaerner.no> Andy Walker <andy@lysaker.kvaerner.no>
15 April 1996 15 April 1996
(Updated September 2007) (Updated September 2007)
0. Why you should avoid mandatory locking 0. Why you should avoid mandatory locking
...@@ -53,15 +58,17 @@ possible on existing user code. The scheme is based on marking individual files ...@@ -53,15 +58,17 @@ possible on existing user code. The scheme is based on marking individual files
as candidates for mandatory locking, and using the existing fcntl()/lockf() as candidates for mandatory locking, and using the existing fcntl()/lockf()
interface for applying locks just as if they were normal, advisory locks. interface for applying locks just as if they were normal, advisory locks.
Note 1: In saying "file" in the paragraphs above I am actually not telling .. Note::
the whole truth. System V locking is based on fcntl(). The granularity of
fcntl() is such that it allows the locking of byte ranges in files, in addition 1. In saying "file" in the paragraphs above I am actually not telling
to entire files, so the mandatory locking rules also have byte level the whole truth. System V locking is based on fcntl(). The granularity of
granularity. fcntl() is such that it allows the locking of byte ranges in files, in
addition to entire files, so the mandatory locking rules also have byte
level granularity.
Note 2: POSIX.1 does not specify any scheme for mandatory locking, despite 2. POSIX.1 does not specify any scheme for mandatory locking, despite
borrowing the fcntl() locking scheme from System V. The mandatory locking borrowing the fcntl() locking scheme from System V. The mandatory locking
scheme is defined by the System V Interface Definition (SVID) Version 3. scheme is defined by the System V Interface Definition (SVID) Version 3.
2. Marking a file for mandatory locking 2. Marking a file for mandatory locking
--------------------------------------- ---------------------------------------
......
...@@ -1870,7 +1870,7 @@ unbindable mount is unbindable ...@@ -1870,7 +1870,7 @@ unbindable mount is unbindable
For more information on mount propagation see: For more information on mount propagation see:
Documentation/filesystems/sharedsubtree.txt Documentation/filesystems/sharedsubtree.rst
3.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm 3.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm
......
.. SPDX-License-Identifier: GPL-2.0
===============
Quota subsystem Quota subsystem
=============== ===============
...@@ -39,6 +41,7 @@ Currently, the interface supports only one message type QUOTA_NL_C_WARNING. ...@@ -39,6 +41,7 @@ Currently, the interface supports only one message type QUOTA_NL_C_WARNING.
This command is used to send a notification about any of the above mentioned This command is used to send a notification about any of the above mentioned
events. Each message has six attributes. These are (type of the argument is events. Each message has six attributes. These are (type of the argument is
in parentheses): in parentheses):
QUOTA_NL_A_QTYPE (u32) QUOTA_NL_A_QTYPE (u32)
- type of quota being exceeded (one of USRQUOTA, GRPQUOTA) - type of quota being exceeded (one of USRQUOTA, GRPQUOTA)
QUOTA_NL_A_EXCESS_ID (u64) QUOTA_NL_A_EXCESS_ID (u64)
...@@ -48,20 +51,34 @@ in parentheses): ...@@ -48,20 +51,34 @@ in parentheses):
- UID of a user who caused the event - UID of a user who caused the event
QUOTA_NL_A_WARNING (u32) QUOTA_NL_A_WARNING (u32)
- what kind of limit is exceeded: - what kind of limit is exceeded:
QUOTA_NL_IHARDWARN - inode hardlimit
QUOTA_NL_ISOFTLONGWARN - inode softlimit is exceeded longer QUOTA_NL_IHARDWARN
inode hardlimit
QUOTA_NL_ISOFTLONGWARN
inode softlimit is exceeded longer
than given grace period than given grace period
QUOTA_NL_ISOFTWARN - inode softlimit QUOTA_NL_ISOFTWARN
QUOTA_NL_BHARDWARN - space (block) hardlimit inode softlimit
QUOTA_NL_BSOFTLONGWARN - space (block) softlimit is exceeded QUOTA_NL_BHARDWARN
space (block) hardlimit
QUOTA_NL_BSOFTLONGWARN
space (block) softlimit is exceeded
longer than given grace period. longer than given grace period.
QUOTA_NL_BSOFTWARN - space (block) softlimit QUOTA_NL_BSOFTWARN
space (block) softlimit
- four warnings are also defined for the event when user stops - four warnings are also defined for the event when user stops
exceeding some limit: exceeding some limit:
QUOTA_NL_IHARDBELOW - inode hardlimit
QUOTA_NL_ISOFTBELOW - inode softlimit QUOTA_NL_IHARDBELOW
QUOTA_NL_BHARDBELOW - space (block) hardlimit inode hardlimit
QUOTA_NL_BSOFTBELOW - space (block) softlimit QUOTA_NL_ISOFTBELOW
inode softlimit
QUOTA_NL_BHARDBELOW
space (block) hardlimit
QUOTA_NL_BSOFTBELOW
space (block) softlimit
QUOTA_NL_A_DEV_MAJOR (u32) QUOTA_NL_A_DEV_MAJOR (u32)
- major number of a device with the affected filesystem - major number of a device with the affected filesystem
QUOTA_NL_A_DEV_MINOR (u32) QUOTA_NL_A_DEV_MINOR (u32)
......
.. SPDX-License-Identifier: GPL-2.0
==============
SPU Filesystem
==============
.. toctree::
:maxdepth: 1
spufs
spu_create
spu_run
.. SPDX-License-Identifier: GPL-2.0
==========
spu_create
==========
Name
====
spu_create - create a new spu context
Synopsis
========
::
#include <sys/types.h>
#include <sys/spu.h>
int spu_create(const char *pathname, int flags, mode_t mode);
Description
===========
The spu_create system call is used on PowerPC machines that implement
the Cell Broadband Engine Architecture in order to access Synergistic
Processor Units (SPUs). It creates a new logical context for an SPU in
pathname and returns a handle to associated with it. pathname must
point to a non-existing directory in the mount point of the SPU file
system (spufs). When spu_create is successful, a directory gets cre-
ated on pathname and it is populated with files.
The returned file handle can only be passed to spu_run(2) or closed,
other operations are not defined on it. When it is closed, all associ-
ated directory entries in spufs are removed. When the last file handle
pointing either inside of the context directory or to this file
descriptor is closed, the logical SPU context is destroyed.
The parameter flags can be zero or any bitwise or'd combination of the
following constants:
SPU_RAWIO
Allow mapping of some of the hardware registers of the SPU into
user space. This flag requires the CAP_SYS_RAWIO capability, see
capabilities(7).
The mode parameter specifies the permissions used for creating the new
directory in spufs. mode is modified with the user's umask(2) value
and then used for both the directory and the files contained in it. The
file permissions mask out some more bits of mode because they typically
support only read or write access. See stat(2) for a full list of the
possible mode values.
Return Value
============
spu_create returns a new file descriptor. It may return -1 to indicate
an error condition and set errno to one of the error codes listed
below.
Errors
======
EACCES
The current user does not have write access on the spufs mount
point.
EEXIST An SPU context already exists at the given path name.
EFAULT pathname is not a valid string pointer in the current address
space.
EINVAL pathname is not a directory in the spufs mount point.
ELOOP Too many symlinks were found while resolving pathname.
EMFILE The process has reached its maximum open file limit.
ENAMETOOLONG
pathname was too long.
ENFILE The system has reached the global open file limit.
ENOENT Part of pathname could not be resolved.
ENOMEM The kernel could not allocate all resources required.
ENOSPC There are not enough SPU resources available to create a new
context or the user specific limit for the number of SPU con-
texts has been reached.
ENOSYS the functionality is not provided by the current system, because
either the hardware does not provide SPUs or the spufs module is
not loaded.
ENOTDIR
A part of pathname is not a directory.
Notes
=====
spu_create is meant to be used from libraries that implement a more
abstract interface to SPUs, not to be used from regular applications.
See http://www.bsc.es/projects/deepcomputing/linuxoncell/ for the rec-
ommended libraries.
Files
=====
pathname must point to a location beneath the mount point of spufs. By
convention, it gets mounted in /spu.
Conforming to
=============
This call is Linux specific and only implemented by the ppc64 architec-
ture. Programs using this system call are not portable.
Bugs
====
The code does not yet fully implement all features lined out here.
Author
======
Arnd Bergmann <arndb@de.ibm.com>
See Also
========
capabilities(7), close(2), spu_run(2), spufs(7)
This diff is collapsed.
...@@ -9,7 +9,7 @@ Configfs is a filesystem-based manager of kernel objects. IIO uses some ...@@ -9,7 +9,7 @@ Configfs is a filesystem-based manager of kernel objects. IIO uses some
objects that could be easily configured using configfs (e.g.: devices, objects that could be easily configured using configfs (e.g.: devices,
triggers). triggers).
See Documentation/filesystems/configfs/configfs.txt for more information See Documentation/filesystems/configfs.rst for more information
about how configfs works. about how configfs works.
2. Usage 2. Usage
......
...@@ -24,7 +24,7 @@ Linux provides a number of functions for gadgets to use. ...@@ -24,7 +24,7 @@ Linux provides a number of functions for gadgets to use.
Creating a gadget means deciding what configurations there will be Creating a gadget means deciding what configurations there will be
and which functions each configuration will provide. and which functions each configuration will provide.
Configfs (please see `Documentation/filesystems/configfs/*`) lends itself nicely Configfs (please see `Documentation/filesystems/configfs.rst`) lends itself nicely
for the purpose of telling the kernel about the above mentioned decision. for the purpose of telling the kernel about the above mentioned decision.
This document is about how to do it. This document is about how to do it.
...@@ -354,7 +354,7 @@ the directories in general can be named at will. A group can have ...@@ -354,7 +354,7 @@ the directories in general can be named at will. A group can have
a number of its default sub-groups created automatically. a number of its default sub-groups created automatically.
For more information on configfs please see For more information on configfs please see
`Documentation/filesystems/configfs/*`. `Documentation/filesystems/configfs.rst`.
The concepts described above translate to USB gadgets like this: The concepts described above translate to USB gadgets like this:
......
This diff is collapsed.
...@@ -8,7 +8,7 @@ config CACHEFILES ...@@ -8,7 +8,7 @@ config CACHEFILES
filesystems - primarily networking filesystems - thus allowing fast filesystems - primarily networking filesystems - thus allowing fast
local disk to enhance the speed of slower devices. local disk to enhance the speed of slower devices.
See Documentation/filesystems/caching/cachefiles.txt for more See Documentation/filesystems/caching/cachefiles.rst for more
information. information.
config CACHEFILES_DEBUG config CACHEFILES_DEBUG
...@@ -36,5 +36,5 @@ config CACHEFILES_HISTOGRAM ...@@ -36,5 +36,5 @@ config CACHEFILES_HISTOGRAM
bouncing between CPUs. On the other hand, the histogram may be bouncing between CPUs. On the other hand, the histogram may be
useful for debugging purposes. Saying 'N' here is recommended. useful for debugging purposes. Saying 'N' here is recommended.
See Documentation/filesystems/caching/cachefiles.txt for more See Documentation/filesystems/caching/cachefiles.rst for more
information. information.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment