blob: f33a7844e8fd857a1d820017c0d8b3dc028b17d6 [file] [log] [blame]
Tejun Heoae6621b2013-11-28 14:54:31 -05001/*
2 * fs/kernfs/kernfs-internal.h - kernfs internal header file
3 *
4 * Copyright (c) 2001-3 Patrick Mochel
5 * Copyright (c) 2007 SUSE Linux Products GmbH
6 * Copyright (c) 2007, 2013 Tejun Heo <teheo@suse.de>
7 *
8 * This file is released under the GPLv2.
9 */
10
11#ifndef __KERNFS_INTERNAL_H
12#define __KERNFS_INTERNAL_H
13
14#include <linux/lockdep.h>
15#include <linux/fs.h>
Tejun Heofd7b9f72013-11-28 14:54:33 -050016#include <linux/mutex.h>
Tejun Heoae6621b2013-11-28 14:54:31 -050017
18#include <linux/kernfs.h>
19
Tejun Heoae6621b2013-11-28 14:54:31 -050020struct sysfs_inode_attrs {
21 struct iattr ia_iattr;
22 void *ia_secdata;
23 u32 ia_secdata_len;
24};
25
Tejun Heoae6621b2013-11-28 14:54:31 -050026#define SD_DEACTIVATED_BIAS INT_MIN
27
Tejun Heocf9e5a72013-11-29 17:18:32 -050028/* SYSFS_TYPE_MASK and types are defined in include/linux/kernfs.h */
Tejun Heoae6621b2013-11-28 14:54:31 -050029
Tejun Heoba7443b2013-11-28 14:54:40 -050030/**
31 * kernfs_root - find out the kernfs_root a sysfs_dirent belongs to
32 * @sd: sysfs_dirent of interest
33 *
34 * Return the kernfs_root @sd belongs to.
35 */
36static inline struct kernfs_root *kernfs_root(struct sysfs_dirent *sd)
37{
38 /* if parent exists, it's always a dir; otherwise, @sd is a dir */
39 if (sd->s_parent)
40 sd = sd->s_parent;
41 return sd->s_dir.root;
42}
43
Tejun Heoae6621b2013-11-28 14:54:31 -050044/*
45 * Context structure to be used while adding/removing nodes.
46 */
47struct sysfs_addrm_cxt {
48 struct sysfs_dirent *removed;
49};
50
51#include "../sysfs/sysfs.h"
52
Tejun Heoffed24e2013-11-28 14:54:32 -050053/*
Tejun Heofa736a92013-11-28 14:54:44 -050054 * mount.c
55 */
56struct sysfs_super_info {
57 /*
58 * The root associated with this super_block. Each super_block is
59 * identified by the root and ns it's associated with.
60 */
61 struct kernfs_root *root;
62
63 /*
64 * Each sb is associated with one namespace tag, currently the network
65 * namespace of the task which mounted this sysfs instance. If multiple
66 * tags become necessary, make the following an array and compare
67 * sysfs_dirent tag against every entry.
68 */
69 const void *ns;
70};
71#define sysfs_info(SB) ((struct sysfs_super_info *)(SB->s_fs_info))
72
73extern struct kmem_cache *sysfs_dir_cachep;
74
75/*
Tejun Heoffed24e2013-11-28 14:54:32 -050076 * inode.c
77 */
78struct inode *sysfs_get_inode(struct super_block *sb, struct sysfs_dirent *sd);
79void sysfs_evict_inode(struct inode *inode);
80int sysfs_permission(struct inode *inode, int mask);
81int sysfs_setattr(struct dentry *dentry, struct iattr *iattr);
82int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
83 struct kstat *stat);
84int sysfs_setxattr(struct dentry *dentry, const char *name, const void *value,
85 size_t size, int flags);
Tejun Heo4b93dc92013-11-28 14:54:43 -050086void sysfs_inode_init(void);
Tejun Heoffed24e2013-11-28 14:54:32 -050087
Tejun Heofd7b9f72013-11-28 14:54:33 -050088/*
89 * dir.c
90 */
91extern struct mutex sysfs_mutex;
92extern const struct dentry_operations sysfs_dentry_ops;
93extern const struct file_operations sysfs_dir_operations;
94extern const struct inode_operations sysfs_dir_inode_operations;
95
96struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd);
97void sysfs_put_active(struct sysfs_dirent *sd);
98void sysfs_addrm_start(struct sysfs_addrm_cxt *acxt);
99int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
100 struct sysfs_dirent *parent_sd);
101void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt);
Tejun Heobc755552013-11-28 14:54:41 -0500102struct sysfs_dirent *sysfs_new_dirent(struct kernfs_root *root,
103 const char *name, umode_t mode, int type);
Tejun Heofd7b9f72013-11-28 14:54:33 -0500104
Tejun Heo414985a2013-11-28 14:54:34 -0500105/*
106 * file.c
107 */
108extern const struct file_operations kernfs_file_operations;
109
110void sysfs_unmap_bin_file(struct sysfs_dirent *sd);
111
Tejun Heo2072f1a2013-11-28 14:54:35 -0500112/*
113 * symlink.c
114 */
115extern const struct inode_operations sysfs_symlink_inode_operations;
116
Tejun Heoae6621b2013-11-28 14:54:31 -0500117#endif /* __KERNFS_INTERNAL_H */