|
@@ -140,6 +140,20 @@ void *__seq_open_private(struct file *, const struct seq_operations *, int);
|
|
int seq_open_private(struct file *, const struct seq_operations *, int);
|
|
int seq_open_private(struct file *, const struct seq_operations *, int);
|
|
int seq_release_private(struct inode *, struct file *);
|
|
int seq_release_private(struct inode *, struct file *);
|
|
|
|
|
|
|
|
+#define DEFINE_SHOW_ATTRIBUTE(__name) \
|
|
|
|
+static int __name ## _open(struct inode *inode, struct file *file) \
|
|
|
|
+{ \
|
|
|
|
+ return single_open(file, __name ## _show, inode->i_private); \
|
|
|
|
+} \
|
|
|
|
+ \
|
|
|
|
+static const struct file_operations __name ## _fops = { \
|
|
|
|
+ .owner = THIS_MODULE, \
|
|
|
|
+ .open = __name ## _open, \
|
|
|
|
+ .read = seq_read, \
|
|
|
|
+ .llseek = seq_lseek, \
|
|
|
|
+ .release = single_release, \
|
|
|
|
+}
|
|
|
|
+
|
|
static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
|
|
static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
|
|
{
|
|
{
|
|
#ifdef CONFIG_USER_NS
|
|
#ifdef CONFIG_USER_NS
|