#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/list.h>
#include <linux/fs.h>
#include <linux/mtd/blktrans.h>
#include <linux/mtd/mtd.h>
#include <linux/blkdev.h>
#include <linux/blk-mq.h>
#include <linux/blkpg.h>
#include <linux/spinlock.h>
#include <linux/hdreg.h>
#include <linux/mutex.h>
#include <linux/uaccess.h>
#include "mtdcore.h"
static LIST_HEAD(blktrans_majors);
static void blktrans_dev_release(struct kref *kref)
{ … }
static void blktrans_dev_put(struct mtd_blktrans_dev *dev)
{ … }
static blk_status_t do_blktrans_request(struct mtd_blktrans_ops *tr,
struct mtd_blktrans_dev *dev,
struct request *req)
{ … }
int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct request *mtd_next_request(struct mtd_blktrans_dev *dev)
{ … }
static void mtd_blktrans_work(struct mtd_blktrans_dev *dev)
__releases(&dev->queue_lock)
__acquires(&dev->queue_lock)
{ … }
static blk_status_t mtd_queue_rq(struct blk_mq_hw_ctx *hctx,
const struct blk_mq_queue_data *bd)
{ … }
static int blktrans_open(struct gendisk *disk, blk_mode_t mode)
{ … }
static void blktrans_release(struct gendisk *disk)
{ … }
static int blktrans_getgeo(struct block_device *bdev, struct hd_geometry *geo)
{ … }
static const struct block_device_operations mtd_block_ops = …;
static const struct blk_mq_ops mtd_mq_ops = …;
int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
{ … }
int del_mtd_blktrans_dev(struct mtd_blktrans_dev *old)
{ … }
static void blktrans_notify_remove(struct mtd_info *mtd)
{ … }
static void blktrans_notify_add(struct mtd_info *mtd)
{ … }
static struct mtd_notifier blktrans_notifier = …;
int register_mtd_blktrans(struct mtd_blktrans_ops *tr)
{ … }
int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr)
{ … }
static void __exit mtd_blktrans_exit(void)
{ … }
module_exit(mtd_blktrans_exit);
EXPORT_SYMBOL_GPL(…);
EXPORT_SYMBOL_GPL(…);
EXPORT_SYMBOL_GPL(…);
EXPORT_SYMBOL_GPL(…);
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;