2017-11-01 21:08:43 +07:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
2006-09-24 22:13:19 +07:00
|
|
|
#ifndef __LINUX_MAGIC_H__
|
|
|
|
#define __LINUX_MAGIC_H__
|
|
|
|
|
|
|
|
#define ADFS_SUPER_MAGIC 0xadf5
|
|
|
|
#define AFFS_SUPER_MAGIC 0xadff
|
2007-01-06 07:36:17 +07:00
|
|
|
#define AFS_SUPER_MAGIC 0x5346414F
|
2006-09-24 22:13:19 +07:00
|
|
|
#define AUTOFS_SUPER_MAGIC 0x0187
|
|
|
|
#define CODA_SUPER_MAGIC 0x73757245
|
2009-05-26 16:45:04 +07:00
|
|
|
#define CRAMFS_MAGIC 0x28cd3d45 /* some random number */
|
|
|
|
#define CRAMFS_MAGIC_WEND 0x453dcd28 /* magic number with the wrong endianess */
|
2008-10-08 01:00:12 +07:00
|
|
|
#define DEBUGFS_MAGIC 0x64626720
|
|
|
|
#define SECURITYFS_MAGIC 0x73636673
|
2009-05-18 21:26:10 +07:00
|
|
|
#define SELINUX_MAGIC 0xf97cff8c
|
2012-11-06 15:17:49 +07:00
|
|
|
#define SMACK_MAGIC 0x43415d53 /* "SMAC" */
|
2009-09-23 06:45:53 +07:00
|
|
|
#define RAMFS_MAGIC 0x858458f6 /* some random number */
|
2008-10-08 01:00:12 +07:00
|
|
|
#define TMPFS_MAGIC 0x01021994
|
2009-09-23 06:43:33 +07:00
|
|
|
#define HUGETLBFS_MAGIC 0x958458f6 /* some random number */
|
2009-01-16 04:51:03 +07:00
|
|
|
#define SQUASHFS_MAGIC 0x73717368
|
2010-11-03 17:11:15 +07:00
|
|
|
#define ECRYPTFS_SUPER_MAGIC 0xf15f
|
2006-09-24 22:13:19 +07:00
|
|
|
#define EFS_SUPER_MAGIC 0x414A53
|
|
|
|
#define EXT2_SUPER_MAGIC 0xEF53
|
|
|
|
#define EXT3_SUPER_MAGIC 0xEF53
|
2009-01-08 09:07:11 +07:00
|
|
|
#define XENFS_SUPER_MAGIC 0xabba1974
|
2006-10-11 15:20:56 +07:00
|
|
|
#define EXT4_SUPER_MAGIC 0xEF53
|
2009-01-16 04:51:03 +07:00
|
|
|
#define BTRFS_SUPER_MAGIC 0x9123683E
|
2011-03-10 14:54:15 +07:00
|
|
|
#define NILFS_SUPER_MAGIC 0x3434
|
f2fs: add superblock and major in-memory structure
This adds the following major in-memory structures in f2fs.
- f2fs_sb_info:
contains f2fs-specific information, two special inode pointers for node and
meta address spaces, and orphan inode management.
- f2fs_inode_info:
contains vfs_inode and other fs-specific information.
- f2fs_nm_info:
contains node manager information such as NAT entry cache, free nid list,
and NAT page management.
- f2fs_node_info:
represents a node as node id, inode number, block address, and its version.
- f2fs_sm_info:
contains segment manager information such as SIT entry cache, free segment
map, current active logs, dirty segment management, and segment utilization.
The specific structures are sit_info, free_segmap_info, dirty_seglist_info,
curseg_info.
In addition, add F2FS_SUPER_MAGIC in magic.h.
Signed-off-by: Chul Lee <chur.lee@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
2012-11-28 11:37:31 +07:00
|
|
|
#define F2FS_SUPER_MAGIC 0xF2F52010
|
2006-09-24 22:13:19 +07:00
|
|
|
#define HPFS_SUPER_MAGIC 0xf995e849
|
|
|
|
#define ISOFS_SUPER_MAGIC 0x9660
|
|
|
|
#define JFFS2_SUPER_MAGIC 0x72b6
|
2018-10-18 13:20:19 +07:00
|
|
|
#define XFS_SUPER_MAGIC 0x58465342 /* "XFSB" */
|
2010-12-29 05:25:21 +07:00
|
|
|
#define PSTOREFS_MAGIC 0x6165676C
|
2012-10-22 21:51:45 +07:00
|
|
|
#define EFIVARFS_MAGIC 0xde5e81e4
|
2013-03-27 17:47:13 +07:00
|
|
|
#define HOSTFS_SUPER_MAGIC 0x00c0ffee
|
2015-11-05 01:59:52 +07:00
|
|
|
#define OVERLAYFS_SUPER_MAGIC 0x794c7630
|
2006-09-24 22:13:19 +07:00
|
|
|
|
2011-11-03 03:37:58 +07:00
|
|
|
#define MINIX_SUPER_MAGIC 0x137F /* minix v1 fs, 14 char names */
|
|
|
|
#define MINIX_SUPER_MAGIC2 0x138F /* minix v1 fs, 30 char names */
|
|
|
|
#define MINIX2_SUPER_MAGIC 0x2468 /* minix v2 fs, 14 char names */
|
|
|
|
#define MINIX2_SUPER_MAGIC2 0x2478 /* minix v2 fs, 30 char names */
|
|
|
|
#define MINIX3_SUPER_MAGIC 0x4d5a /* minix v3 fs, 60 char names */
|
2006-09-24 22:13:19 +07:00
|
|
|
|
|
|
|
#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
|
|
|
|
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
|
|
|
|
#define NFS_SUPER_MAGIC 0x6969
|
2017-07-07 05:36:10 +07:00
|
|
|
#define OCFS2_SUPER_MAGIC 0x7461636f
|
2006-09-24 22:13:19 +07:00
|
|
|
#define OPENPROM_SUPER_MAGIC 0x9fa1
|
|
|
|
#define QNX4_SUPER_MAGIC 0x002f /* qnx4 fs detection */
|
2012-02-17 11:59:20 +07:00
|
|
|
#define QNX6_SUPER_MAGIC 0x68191122 /* qnx6 fs detection */
|
2017-11-02 22:27:45 +07:00
|
|
|
#define AFS_FS_MAGIC 0x6B414653
|
2006-09-24 22:13:19 +07:00
|
|
|
|
|
|
|
#define REISERFS_SUPER_MAGIC 0x52654973 /* used by gcc */
|
|
|
|
/* used by file system utilities that
|
|
|
|
look at the superblock, etc. */
|
|
|
|
#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs"
|
|
|
|
#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs"
|
|
|
|
#define REISER2FS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs"
|
|
|
|
|
|
|
|
#define SMB_SUPER_MAGIC 0x517B
|
Task Control Groups: basic task cgroup framework
Generic Process Control Groups
--------------------------
There have recently been various proposals floating around for
resource management/accounting and other task grouping subsystems in
the kernel, including ResGroups, User BeanCounters, NSProxy
cgroups, and others. These all need the basic abstraction of being
able to group together multiple processes in an aggregate, in order to
track/limit the resources permitted to those processes, or control
other behaviour of the processes, and all implement this grouping in
different ways.
This patchset provides a framework for tracking and grouping processes
into arbitrary "cgroups" and assigning arbitrary state to those
groupings, in order to control the behaviour of the cgroup as an
aggregate.
The intention is that the various resource management and
virtualization/cgroup efforts can also become task cgroup
clients, with the result that:
- the userspace APIs are (somewhat) normalised
- it's easier to test e.g. the ResGroups CPU controller in
conjunction with the BeanCounters memory controller, or use either of
them as the resource-control portion of a virtual server system.
- the additional kernel footprint of any of the competing resource
management systems is substantially reduced, since it doesn't need
to provide process grouping/containment, hence improving their
chances of getting into the kernel
This patch:
Add the main task cgroups framework - the cgroup filesystem, and the
basic structures for tracking membership and associating subsystem state
objects to tasks.
Signed-off-by: Paul Menage <menage@google.com>
Cc: Serge E. Hallyn <serue@us.ibm.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Dave Hansen <haveblue@us.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Paul Jackson <pj@sgi.com>
Cc: Kirill Korotaev <dev@openvz.org>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-10-19 13:39:30 +07:00
|
|
|
#define CGROUP_SUPER_MAGIC 0x27e0eb
|
2015-11-16 23:13:34 +07:00
|
|
|
#define CGROUP2_SUPER_MAGIC 0x63677270
|
2006-09-24 22:13:19 +07:00
|
|
|
|
2016-10-29 05:04:42 +07:00
|
|
|
#define RDTGROUP_SUPER_MAGIC 0x7655821
|
2007-10-17 13:30:13 +07:00
|
|
|
|
2008-04-23 04:38:23 +07:00
|
|
|
#define STACK_END_MAGIC 0x57AC6E9D
|
2009-09-23 06:43:33 +07:00
|
|
|
|
2015-01-20 23:36:55 +07:00
|
|
|
#define TRACEFS_MAGIC 0x74726163
|
|
|
|
|
2012-03-24 05:01:50 +07:00
|
|
|
#define V9FS_MAGIC 0x01021997
|
|
|
|
|
|
|
|
#define BDEVFS_MAGIC 0x62646576
|
2016-07-25 11:55:45 +07:00
|
|
|
#define DAXFS_MAGIC 0x64646178
|
2012-03-24 05:01:50 +07:00
|
|
|
#define BINFMTFS_MAGIC 0x42494e4d
|
2009-09-23 06:43:33 +07:00
|
|
|
#define DEVPTS_SUPER_MAGIC 0x1cd1
|
binder: implement binderfs
As discussed at Linux Plumbers Conference 2018 in Vancouver [1] this is the
implementation of binderfs.
/* Abstract */
binderfs is a backwards-compatible filesystem for Android's binder ipc
mechanism. Each ipc namespace will mount a new binderfs instance. Mounting
binderfs multiple times at different locations in the same ipc namespace
will not cause a new super block to be allocated and hence it will be the
same filesystem instance.
Each new binderfs mount will have its own set of binder devices only
visible in the ipc namespace it has been mounted in. All devices in a new
binderfs mount will follow the scheme binder%d and numbering will always
start at 0.
/* Backwards compatibility */
Devices requested in the Kconfig via CONFIG_ANDROID_BINDER_DEVICES for the
initial ipc namespace will work as before. They will be registered via
misc_register() and appear in the devtmpfs mount. Specifically, the
standard devices binder, hwbinder, and vndbinder will all appear in their
standard locations in /dev. Mounting or unmounting the binderfs mount in
the initial ipc namespace will have no effect on these devices, i.e. they
will neither show up in the binderfs mount nor will they disappear when the
binderfs mount is gone.
/* binder-control */
Each new binderfs instance comes with a binder-control device. No other
devices will be present at first. The binder-control device can be used to
dynamically allocate binder devices. All requests operate on the binderfs
mount the binder-control device resides in.
Assuming a new instance of binderfs has been mounted at /dev/binderfs
via mount -t binderfs binderfs /dev/binderfs. Then a request to create a
new binder device can be made as illustrated in [2].
Binderfs devices can simply be removed via unlink().
/* Implementation details */
- dynamic major number allocation:
When binderfs is registered as a new filesystem it will dynamically
allocate a new major number. The allocated major number will be returned
in struct binderfs_device when a new binder device is allocated.
- global minor number tracking:
Minor are tracked in a global idr struct that is capped at
BINDERFS_MAX_MINOR. The minor number tracker is protected by a global
mutex. This is the only point of contention between binderfs mounts.
- struct binderfs_info:
Each binderfs super block has its own struct binderfs_info that tracks
specific details about a binderfs instance:
- ipc namespace
- dentry of the binder-control device
- root uid and root gid of the user namespace the binderfs instance
was mounted in
- mountable by user namespace root:
binderfs can be mounted by user namespace root in a non-initial user
namespace. The devices will be owned by user namespace root.
- binderfs binder devices without misc infrastructure:
New binder devices associated with a binderfs mount do not use the
full misc_register() infrastructure.
The misc_register() infrastructure can only create new devices in the
host's devtmpfs mount. binderfs does however only make devices appear
under its own mountpoint and thus allocates new character device nodes
from the inode of the root dentry of the super block. This will have
the side-effect that binderfs specific device nodes do not appear in
sysfs. This behavior is similar to devpts allocated pts devices and
has no effect on the functionality of the ipc mechanism itself.
[1]: https://goo.gl/JL2tfX
[2]: program to allocate a new binderfs binder device:
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <linux/android/binder_ctl.h>
int main(int argc, char *argv[])
{
int fd, ret, saved_errno;
size_t len;
struct binderfs_device device = { 0 };
if (argc < 2)
exit(EXIT_FAILURE);
len = strlen(argv[1]);
if (len > BINDERFS_MAX_NAME)
exit(EXIT_FAILURE);
memcpy(device.name, argv[1], len);
fd = open("/dev/binderfs/binder-control", O_RDONLY | O_CLOEXEC);
if (fd < 0) {
printf("%s - Failed to open binder-control device\n",
strerror(errno));
exit(EXIT_FAILURE);
}
ret = ioctl(fd, BINDER_CTL_ADD, &device);
saved_errno = errno;
close(fd);
errno = saved_errno;
if (ret < 0) {
printf("%s - Failed to allocate new binder device\n",
strerror(errno));
exit(EXIT_FAILURE);
}
printf("Allocated new binder device with major %d, minor %d, and "
"name %s\n", device.major, device.minor,
device.name);
exit(EXIT_SUCCESS);
}
Cc: Martijn Coenen <maco@android.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Acked-by: Todd Kjos <tkjos@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-14 19:11:14 +07:00
|
|
|
#define BINDERFS_SUPER_MAGIC 0x6c6f6f70
|
2012-03-24 05:01:50 +07:00
|
|
|
#define FUTEXFS_SUPER_MAGIC 0xBAD1DEA
|
|
|
|
#define PIPEFS_MAGIC 0x50495045
|
|
|
|
#define PROC_SUPER_MAGIC 0x9fa0
|
2009-09-23 06:43:33 +07:00
|
|
|
#define SOCKFS_MAGIC 0x534F434B
|
2012-03-24 05:01:50 +07:00
|
|
|
#define SYSFS_MAGIC 0x62656572
|
|
|
|
#define USBDEVICE_SUPER_MAGIC 0x9fa2
|
|
|
|
#define MTD_INODE_FS_MAGIC 0x11307854
|
|
|
|
#define ANON_INODE_FS_MAGIC 0x09041934
|
2013-10-09 23:00:56 +07:00
|
|
|
#define BTRFS_TEST_MAGIC 0x73727279
|
take the targets of /proc/*/ns/* symlinks to separate fs
New pseudo-filesystem: nsfs. Targets of /proc/*/ns/* live there now.
It's not mountable (not even registered, so it's not in /proc/filesystems,
etc.). Files on it *are* bindable - we explicitly permit that in do_loopback().
This stuff lives in fs/nsfs.c now; proc_ns_fget() moved there as well.
get_proc_ns() is a macro now (it's simply returning ->i_private; would
have been an inline, if not for header ordering headache).
proc_ns_inode() is an ex-parrot. The interface used in procfs is
ns_get_path(path, task, ops) and ns_get_name(buf, size, task, ops).
Dentries and inodes are never hashed; a non-counting reference to dentry
is stashed in ns_common (removed by ->d_prune()) and reused by ns_get_path()
if present. See ns_get_path()/ns_prune_dentry/nsfs_evict() for details
of that mechanism.
As the result, proc_ns_follow_link() has stopped poking in nd->path.mnt;
it does nd_jump_link() on a consistent <vfsmount,dentry> pair it gets
from ns_get_path().
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2014-11-01 21:57:28 +07:00
|
|
|
#define NSFS_MAGIC 0x6e736673
|
2015-10-29 20:58:09 +07:00
|
|
|
#define BPF_FS_MAGIC 0xcafe4a11
|
2017-05-25 19:52:56 +07:00
|
|
|
#define AAFS_MAGIC 0x5a3c69f0
|
|
|
|
|
2016-04-28 15:40:09 +07:00
|
|
|
/* Since UDF 2.01 is ISO 13346 based... */
|
|
|
|
#define UDF_SUPER_MAGIC 0x15013346
|
2016-07-27 05:23:09 +07:00
|
|
|
#define BALLOON_KVM_MAGIC 0x13661366
|
zsmalloc: page migration support
This patch introduces run-time migration feature for zspage.
For migration, VM uses page.lru field so it would be better to not use
page.next field which is unified with page.lru for own purpose. For
that, firstly, we can get first object offset of the page via runtime
calculation instead of using page.index so we can use page.index as link
for page chaining instead of page.next.
In case of huge object, it stores handle to page.index instead of next
link of page chaining because huge object doesn't need to next link for
page chaining. So get_next_page need to identify huge object to return
NULL. For it, this patch uses PG_owner_priv_1 flag of the page flag.
For migration, it supports three functions
* zs_page_isolate
It isolates a zspage which includes a subpage VM want to migrate from
class so anyone cannot allocate new object from the zspage.
We could try to isolate a zspage by the number of subpage so subsequent
isolation trial of other subpage of the zpsage shouldn't fail. For
that, we introduce zspage.isolated count. With that, zs_page_isolate
can know whether zspage is already isolated or not for migration so if
it is isolated for migration, subsequent isolation trial can be
successful without trying further isolation.
* zs_page_migrate
First of all, it holds write-side zspage->lock to prevent migrate other
subpage in zspage. Then, lock all objects in the page VM want to
migrate. The reason we should lock all objects in the page is due to
race between zs_map_object and zs_page_migrate.
zs_map_object zs_page_migrate
pin_tag(handle)
obj = handle_to_obj(handle)
obj_to_location(obj, &page, &obj_idx);
write_lock(&zspage->lock)
if (!trypin_tag(handle))
goto unpin_object
zspage = get_zspage(page);
read_lock(&zspage->lock);
If zs_page_migrate doesn't do trypin_tag, zs_map_object's page can be
stale by migration so it goes crash.
If it locks all of objects successfully, it copies content from old page
to new one, finally, create new zspage chain with new page. And if it's
last isolated subpage in the zspage, put the zspage back to class.
* zs_page_putback
It returns isolated zspage to right fullness_group list if it fails to
migrate a page. If it find a zspage is ZS_EMPTY, it queues zspage
freeing to workqueue. See below about async zspage freeing.
This patch introduces asynchronous zspage free. The reason to need it
is we need page_lock to clear PG_movable but unfortunately, zs_free path
should be atomic so the apporach is try to grab page_lock. If it got
page_lock of all of pages successfully, it can free zspage immediately.
Otherwise, it queues free request and free zspage via workqueue in
process context.
If zs_free finds the zspage is isolated when it try to free zspage, it
delays the freeing until zs_page_putback finds it so it will free free
the zspage finally.
In this patch, we expand fullness_list from ZS_EMPTY to ZS_FULL. First
of all, it will use ZS_EMPTY list for delay freeing. And with adding
ZS_FULL list, it makes to identify whether zspage is isolated or not via
list_empty(&zspage->list) test.
[minchan@kernel.org: zsmalloc: keep first object offset in struct page]
Link: http://lkml.kernel.org/r/1465788015-23195-1-git-send-email-minchan@kernel.org
[minchan@kernel.org: zsmalloc: zspage sanity check]
Link: http://lkml.kernel.org/r/20160603010129.GC3304@bbox
Link: http://lkml.kernel.org/r/1464736881-24886-12-git-send-email-minchan@kernel.org
Signed-off-by: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-07-27 05:23:31 +07:00
|
|
|
#define ZSMALLOC_MAGIC 0x58295829
|
2009-09-23 06:43:33 +07:00
|
|
|
|
2006-09-24 22:13:19 +07:00
|
|
|
#endif /* __LINUX_MAGIC_H__ */
|