root/fs/debugfs/internal.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 *  internal.h - declarations internal to debugfs
 *
 *  Copyright (C) 2016 Nicolai Stange <nicstange@gmail.com>
 */

#ifndef _DEBUGFS_INTERNAL_H_
#define _DEBUGFS_INTERNAL_H_
#include <linux/list.h>

struct file_operations;

struct debugfs_inode_info {
        struct inode vfs_inode;
        union {
                const void *raw;
                const struct file_operations *real_fops;
                const struct debugfs_short_fops *short_fops;
                debugfs_automount_t automount;
        };
        void *aux;
};

static inline struct debugfs_inode_info *DEBUGFS_I(struct inode *inode)
{
        return container_of(inode, struct debugfs_inode_info, vfs_inode);
}

/* declared over in file.c */
extern const struct file_operations debugfs_noop_file_operations;
extern const struct file_operations debugfs_open_proxy_file_operations;
extern const struct file_operations debugfs_full_proxy_file_operations;
extern const struct file_operations debugfs_full_short_proxy_file_operations;

struct debugfs_fsdata {
        const struct file_operations *real_fops;
        const struct debugfs_short_fops *short_fops;
        struct {
                refcount_t active_users;
                struct completion active_users_drained;

                /* protect cancellations */
                struct mutex cancellations_mtx;
                struct list_head cancellations;
                unsigned int methods;
        };
};

enum {
        HAS_READ = 1,
        HAS_WRITE = 2,
        HAS_LSEEK = 4,
        HAS_POLL = 8,
        HAS_IOCTL = 16
};

#endif /* _DEBUGFS_INTERNAL_H_ */