mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
block: remove pktcdvd driver
This driver has long outlived it's utility, and it's broken and unloved. The main use case for this was direct mount with UDF of cd-rw drives that required 32kb packets. It would collect writes into that size and write them out in multiples of that. That's not a common use case anymore, the world has moved on from those kinds of media. To make matters worse, it's actively breaking setups where it's not even required or useful. Link: https://lore.kernel.org/linux-block/fxg6dksau4jsk3u5xldlyo2m7qgiux6vtdrz5rywseotsouqdv@urcrwz6qtd3r/ Link: https://lore.kernel.org/linux-block/dcc4836e-6da9-4208-ad27-bbd44b3a2063@kernel.dk/ Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
10d77a8c60
commit
1cea5180f2
9 changed files with 0 additions and 3420 deletions
|
@ -1,18 +0,0 @@
|
||||||
What: /sys/kernel/debug/pktcdvd/pktcdvd[0-7]
|
|
||||||
Date: Oct. 2006
|
|
||||||
KernelVersion: 2.6.20
|
|
||||||
Contact: Thomas Maier <balagi@justmail.de>
|
|
||||||
Description:
|
|
||||||
|
|
||||||
The pktcdvd module (packet writing driver) creates
|
|
||||||
these files in debugfs:
|
|
||||||
|
|
||||||
/sys/kernel/debug/pktcdvd/pktcdvd[0-7]/
|
|
||||||
|
|
||||||
==== ====== ====================================
|
|
||||||
info 0444 Lots of driver statistics and infos.
|
|
||||||
==== ====== ====================================
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
cat /sys/kernel/debug/pktcdvd/pktcdvd0/info
|
|
|
@ -1,97 +0,0 @@
|
||||||
sysfs interface
|
|
||||||
---------------
|
|
||||||
The pktcdvd module (packet writing driver) creates the following files in the
|
|
||||||
sysfs: (<devid> is in the format major:minor)
|
|
||||||
|
|
||||||
What: /sys/class/pktcdvd/add
|
|
||||||
What: /sys/class/pktcdvd/remove
|
|
||||||
What: /sys/class/pktcdvd/device_map
|
|
||||||
Date: Oct. 2006
|
|
||||||
KernelVersion: 2.6.20
|
|
||||||
Contact: Thomas Maier <balagi@justmail.de>
|
|
||||||
Description:
|
|
||||||
|
|
||||||
========== ==============================================
|
|
||||||
add (WO) Write a block device id (major:minor) to
|
|
||||||
create a new pktcdvd device and map it to the
|
|
||||||
block device.
|
|
||||||
|
|
||||||
remove (WO) Write the pktcdvd device id (major:minor)
|
|
||||||
to remove the pktcdvd device.
|
|
||||||
|
|
||||||
device_map (RO) Shows the device mapping in format:
|
|
||||||
pktcdvd[0-7] <pktdevid> <blkdevid>
|
|
||||||
========== ==============================================
|
|
||||||
|
|
||||||
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/dev
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/uevent
|
|
||||||
Date: Oct. 2006
|
|
||||||
KernelVersion: 2.6.20
|
|
||||||
Contact: Thomas Maier <balagi@justmail.de>
|
|
||||||
Description:
|
|
||||||
dev: (RO) Device id
|
|
||||||
|
|
||||||
uevent: (WO) To send a uevent
|
|
||||||
|
|
||||||
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/stat/packets_started
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/stat/packets_finished
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/stat/kb_written
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/stat/kb_read
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/stat/kb_read_gather
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/stat/reset
|
|
||||||
Date: Oct. 2006
|
|
||||||
KernelVersion: 2.6.20
|
|
||||||
Contact: Thomas Maier <balagi@justmail.de>
|
|
||||||
Description:
|
|
||||||
packets_started: (RO) Number of started packets.
|
|
||||||
|
|
||||||
packets_finished: (RO) Number of finished packets.
|
|
||||||
|
|
||||||
kb_written: (RO) kBytes written.
|
|
||||||
|
|
||||||
kb_read: (RO) kBytes read.
|
|
||||||
|
|
||||||
kb_read_gather: (RO) kBytes read to fill write packets.
|
|
||||||
|
|
||||||
reset: (WO) Write any value to it to reset
|
|
||||||
pktcdvd device statistic values, like
|
|
||||||
bytes read/written.
|
|
||||||
|
|
||||||
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/write_queue/size
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/write_queue/congestion_off
|
|
||||||
What: /sys/class/pktcdvd/pktcdvd[0-7]/write_queue/congestion_on
|
|
||||||
Date: Oct. 2006
|
|
||||||
KernelVersion: 2.6.20
|
|
||||||
Contact: Thomas Maier <balagi@justmail.de>
|
|
||||||
Description:
|
|
||||||
============== ================================================
|
|
||||||
size (RO) Contains the size of the bio write queue.
|
|
||||||
|
|
||||||
congestion_off (RW) If bio write queue size is below this mark,
|
|
||||||
accept new bio requests from the block layer.
|
|
||||||
|
|
||||||
congestion_on (RW) If bio write queue size is higher as this
|
|
||||||
mark, do no longer accept bio write requests
|
|
||||||
from the block layer and wait till the pktcdvd
|
|
||||||
device has processed enough bio's so that bio
|
|
||||||
write queue size is below congestion off mark.
|
|
||||||
A value of <= 0 disables congestion control.
|
|
||||||
============== ================================================
|
|
||||||
|
|
||||||
|
|
||||||
Example:
|
|
||||||
--------
|
|
||||||
To use the pktcdvd sysfs interface directly, you can do::
|
|
||||||
|
|
||||||
# create a new pktcdvd device mapped to /dev/hdc
|
|
||||||
echo "22:0" >/sys/class/pktcdvd/add
|
|
||||||
cat /sys/class/pktcdvd/device_map
|
|
||||||
# assuming device pktcdvd0 was created, look at stat's
|
|
||||||
cat /sys/class/pktcdvd/pktcdvd0/stat/kb_written
|
|
||||||
# print the device id of the mapped block device
|
|
||||||
fgrep pktcdvd0 /sys/class/pktcdvd/device_map
|
|
||||||
# remove device, using pktcdvd0 device id 253:0
|
|
||||||
echo "253:0" >/sys/class/pktcdvd/remove
|
|
|
@ -1,139 +0,0 @@
|
||||||
==============
|
|
||||||
Packet writing
|
|
||||||
==============
|
|
||||||
|
|
||||||
Getting started quick
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
- Select packet support in the block device section and UDF support in
|
|
||||||
the file system section.
|
|
||||||
|
|
||||||
- Compile and install kernel and modules, reboot.
|
|
||||||
|
|
||||||
- You need the udftools package (pktsetup, mkudffs, cdrwtool).
|
|
||||||
Download from https://github.com/pali/udftools
|
|
||||||
|
|
||||||
- Grab a new CD-RW disc and format it (assuming CD-RW is hdc, substitute
|
|
||||||
as appropriate)::
|
|
||||||
|
|
||||||
# cdrwtool -d /dev/hdc -q
|
|
||||||
|
|
||||||
- Setup your writer::
|
|
||||||
|
|
||||||
# pktsetup dev_name /dev/hdc
|
|
||||||
|
|
||||||
- Now you can mount /dev/pktcdvd/dev_name and copy files to it. Enjoy::
|
|
||||||
|
|
||||||
# mount /dev/pktcdvd/dev_name /cdrom -t udf -o rw,noatime
|
|
||||||
|
|
||||||
|
|
||||||
Packet writing for DVD-RW media
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
DVD-RW discs can be written to much like CD-RW discs if they are in
|
|
||||||
the so called "restricted overwrite" mode. To put a disc in restricted
|
|
||||||
overwrite mode, run::
|
|
||||||
|
|
||||||
# dvd+rw-format /dev/hdc
|
|
||||||
|
|
||||||
You can then use the disc the same way you would use a CD-RW disc::
|
|
||||||
|
|
||||||
# pktsetup dev_name /dev/hdc
|
|
||||||
# mount /dev/pktcdvd/dev_name /cdrom -t udf -o rw,noatime
|
|
||||||
|
|
||||||
|
|
||||||
Packet writing for DVD+RW media
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
According to the DVD+RW specification, a drive supporting DVD+RW discs
|
|
||||||
shall implement "true random writes with 2KB granularity", which means
|
|
||||||
that it should be possible to put any filesystem with a block size >=
|
|
||||||
2KB on such a disc. For example, it should be possible to do::
|
|
||||||
|
|
||||||
# dvd+rw-format /dev/hdc (only needed if the disc has never
|
|
||||||
been formatted)
|
|
||||||
# mkudffs /dev/hdc
|
|
||||||
# mount /dev/hdc /cdrom -t udf -o rw,noatime
|
|
||||||
|
|
||||||
However, some drives don't follow the specification and expect the
|
|
||||||
host to perform aligned writes at 32KB boundaries. Other drives do
|
|
||||||
follow the specification, but suffer bad performance problems if the
|
|
||||||
writes are not 32KB aligned.
|
|
||||||
|
|
||||||
Both problems can be solved by using the pktcdvd driver, which always
|
|
||||||
generates aligned writes::
|
|
||||||
|
|
||||||
# dvd+rw-format /dev/hdc
|
|
||||||
# pktsetup dev_name /dev/hdc
|
|
||||||
# mkudffs /dev/pktcdvd/dev_name
|
|
||||||
# mount /dev/pktcdvd/dev_name /cdrom -t udf -o rw,noatime
|
|
||||||
|
|
||||||
|
|
||||||
Packet writing for DVD-RAM media
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
DVD-RAM discs are random writable, so using the pktcdvd driver is not
|
|
||||||
necessary. However, using the pktcdvd driver can improve performance
|
|
||||||
in the same way it does for DVD+RW media.
|
|
||||||
|
|
||||||
|
|
||||||
Notes
|
|
||||||
-----
|
|
||||||
|
|
||||||
- CD-RW media can usually not be overwritten more than about 1000
|
|
||||||
times, so to avoid unnecessary wear on the media, you should always
|
|
||||||
use the noatime mount option.
|
|
||||||
|
|
||||||
- Defect management (ie automatic remapping of bad sectors) has not
|
|
||||||
been implemented yet, so you are likely to get at least some
|
|
||||||
filesystem corruption if the disc wears out.
|
|
||||||
|
|
||||||
- Since the pktcdvd driver makes the disc appear as a regular block
|
|
||||||
device with a 2KB block size, you can put any filesystem you like on
|
|
||||||
the disc. For example, run::
|
|
||||||
|
|
||||||
# /sbin/mke2fs /dev/pktcdvd/dev_name
|
|
||||||
|
|
||||||
to create an ext2 filesystem on the disc.
|
|
||||||
|
|
||||||
|
|
||||||
Using the pktcdvd sysfs interface
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
Since Linux 2.6.20, the pktcdvd module has a sysfs interface
|
|
||||||
and can be controlled by it. For example the "pktcdvd" tool uses
|
|
||||||
this interface. (see http://tom.ist-im-web.de/linux/software/pktcdvd )
|
|
||||||
|
|
||||||
"pktcdvd" works similar to "pktsetup", e.g.::
|
|
||||||
|
|
||||||
# pktcdvd -a dev_name /dev/hdc
|
|
||||||
# mkudffs /dev/pktcdvd/dev_name
|
|
||||||
# mount -t udf -o rw,noatime /dev/pktcdvd/dev_name /dvdram
|
|
||||||
# cp files /dvdram
|
|
||||||
# umount /dvdram
|
|
||||||
# pktcdvd -r dev_name
|
|
||||||
|
|
||||||
|
|
||||||
For a description of the sysfs interface look into the file:
|
|
||||||
|
|
||||||
Documentation/ABI/testing/sysfs-class-pktcdvd
|
|
||||||
|
|
||||||
|
|
||||||
Using the pktcdvd debugfs interface
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
To read pktcdvd device infos in human readable form, do::
|
|
||||||
|
|
||||||
# cat /sys/kernel/debug/pktcdvd/pktcdvd[0-7]/info
|
|
||||||
|
|
||||||
For a description of the debugfs interface look into the file:
|
|
||||||
|
|
||||||
Documentation/ABI/testing/debugfs-pktcdvd
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
See http://fy.chalmers.se/~appro/linux/DVD+RW/ for more information
|
|
||||||
about DVD writing.
|
|
|
@ -220,7 +220,6 @@ Code Seq# Include File Comments
|
||||||
include/linux/falloc.h,
|
include/linux/falloc.h,
|
||||||
linux/fs.h,
|
linux/fs.h,
|
||||||
'X' all fs/ocfs2/ocfs_fs.h conflict!
|
'X' all fs/ocfs2/ocfs_fs.h conflict!
|
||||||
'X' 01 linux/pktcdvd.h conflict!
|
|
||||||
'Z' 14-15 drivers/message/fusion/mptctl.h
|
'Z' 14-15 drivers/message/fusion/mptctl.h
|
||||||
'[' 00-3F linux/usb/tmc.h USB Test and Measurement Devices
|
'[' 00-3F linux/usb/tmc.h USB Test and Measurement Devices
|
||||||
<mailto:gregkh@linuxfoundation.org>
|
<mailto:gregkh@linuxfoundation.org>
|
||||||
|
|
|
@ -19697,13 +19697,6 @@ S: Supported
|
||||||
F: Documentation/devicetree/bindings/input/pine64,pinephone-keyboard.yaml
|
F: Documentation/devicetree/bindings/input/pine64,pinephone-keyboard.yaml
|
||||||
F: drivers/input/keyboard/pinephone-keyboard.c
|
F: drivers/input/keyboard/pinephone-keyboard.c
|
||||||
|
|
||||||
PKTCDVD DRIVER
|
|
||||||
M: linux-block@vger.kernel.org
|
|
||||||
S: Orphan
|
|
||||||
F: drivers/block/pktcdvd.c
|
|
||||||
F: include/linux/pktcdvd.h
|
|
||||||
F: include/uapi/linux/pktcdvd.h
|
|
||||||
|
|
||||||
PLANTOWER PMS7003 AIR POLLUTION SENSOR DRIVER
|
PLANTOWER PMS7003 AIR POLLUTION SENSOR DRIVER
|
||||||
M: Tomasz Duszynski <tduszyns@gmail.com>
|
M: Tomasz Duszynski <tduszyns@gmail.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
|
@ -256,49 +256,6 @@ config BLK_DEV_RAM_SIZE
|
||||||
The default value is 4096 kilobytes. Only change this if you know
|
The default value is 4096 kilobytes. Only change this if you know
|
||||||
what you are doing.
|
what you are doing.
|
||||||
|
|
||||||
config CDROM_PKTCDVD
|
|
||||||
tristate "Packet writing on CD/DVD media (DEPRECATED)"
|
|
||||||
depends on !UML
|
|
||||||
depends on SCSI
|
|
||||||
select CDROM
|
|
||||||
help
|
|
||||||
Note: This driver is deprecated and will be removed from the
|
|
||||||
kernel in the near future!
|
|
||||||
|
|
||||||
If you have a CDROM/DVD drive that supports packet writing, say
|
|
||||||
Y to include support. It should work with any MMC/Mt Fuji
|
|
||||||
compliant ATAPI or SCSI drive, which is just about any newer
|
|
||||||
DVD/CD writer.
|
|
||||||
|
|
||||||
Currently only writing to CD-RW, DVD-RW, DVD+RW and DVDRAM discs
|
|
||||||
is possible.
|
|
||||||
DVD-RW disks must be in restricted overwrite mode.
|
|
||||||
|
|
||||||
See the file <file:Documentation/cdrom/packet-writing.rst>
|
|
||||||
for further information on the use of this driver.
|
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the
|
|
||||||
module will be called pktcdvd.
|
|
||||||
|
|
||||||
config CDROM_PKTCDVD_BUFFERS
|
|
||||||
int "Free buffers for data gathering"
|
|
||||||
depends on CDROM_PKTCDVD
|
|
||||||
default "8"
|
|
||||||
help
|
|
||||||
This controls the maximum number of active concurrent packets. More
|
|
||||||
concurrent packets can increase write performance, but also require
|
|
||||||
more memory. Each concurrent packet will require approximately 64Kb
|
|
||||||
of non-swappable kernel memory, memory which will be allocated when
|
|
||||||
a disc is opened for writing.
|
|
||||||
|
|
||||||
config CDROM_PKTCDVD_WCACHE
|
|
||||||
bool "Enable write caching"
|
|
||||||
depends on CDROM_PKTCDVD
|
|
||||||
help
|
|
||||||
If enabled, write caching will be set for the CD-R/W device. For now
|
|
||||||
this option is dangerous unless the CD-RW media is known good, as we
|
|
||||||
don't do deferred write error handling yet.
|
|
||||||
|
|
||||||
config ATA_OVER_ETH
|
config ATA_OVER_ETH
|
||||||
tristate "ATA over Ethernet support"
|
tristate "ATA over Ethernet support"
|
||||||
depends on NET
|
depends on NET
|
||||||
|
|
|
@ -23,7 +23,6 @@ obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o
|
||||||
obj-$(CONFIG_N64CART) += n64cart.o
|
obj-$(CONFIG_N64CART) += n64cart.o
|
||||||
obj-$(CONFIG_BLK_DEV_RAM) += brd.o
|
obj-$(CONFIG_BLK_DEV_RAM) += brd.o
|
||||||
obj-$(CONFIG_BLK_DEV_LOOP) += loop.o
|
obj-$(CONFIG_BLK_DEV_LOOP) += loop.o
|
||||||
obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o
|
|
||||||
obj-$(CONFIG_SUNVDC) += sunvdc.o
|
obj-$(CONFIG_SUNVDC) += sunvdc.o
|
||||||
|
|
||||||
obj-$(CONFIG_BLK_DEV_NBD) += nbd.o
|
obj-$(CONFIG_BLK_DEV_NBD) += nbd.o
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,198 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2000 Jens Axboe <axboe@suse.de>
|
|
||||||
* Copyright (C) 2001-2004 Peter Osterlund <petero2@telia.com>
|
|
||||||
*
|
|
||||||
* May be copied or modified under the terms of the GNU General Public
|
|
||||||
* License. See linux/COPYING for more information.
|
|
||||||
*
|
|
||||||
* Packet writing layer for ATAPI and SCSI CD-R, CD-RW, DVD-R, and
|
|
||||||
* DVD-RW devices.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifndef __PKTCDVD_H
|
|
||||||
#define __PKTCDVD_H
|
|
||||||
|
|
||||||
#include <linux/blkdev.h>
|
|
||||||
#include <linux/completion.h>
|
|
||||||
#include <linux/cdrom.h>
|
|
||||||
#include <linux/kobject.h>
|
|
||||||
#include <linux/sysfs.h>
|
|
||||||
#include <linux/mempool.h>
|
|
||||||
#include <uapi/linux/pktcdvd.h>
|
|
||||||
|
|
||||||
/* default bio write queue congestion marks */
|
|
||||||
#define PKT_WRITE_CONGESTION_ON 10000
|
|
||||||
#define PKT_WRITE_CONGESTION_OFF 9000
|
|
||||||
|
|
||||||
|
|
||||||
struct packet_settings
|
|
||||||
{
|
|
||||||
__u32 size; /* packet size in (512 byte) sectors */
|
|
||||||
__u8 fp; /* fixed packets */
|
|
||||||
__u8 link_loss; /* the rest is specified
|
|
||||||
* as per Mt Fuji */
|
|
||||||
__u8 write_type;
|
|
||||||
__u8 track_mode;
|
|
||||||
__u8 block_mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Very crude stats for now
|
|
||||||
*/
|
|
||||||
struct packet_stats
|
|
||||||
{
|
|
||||||
unsigned long pkt_started;
|
|
||||||
unsigned long pkt_ended;
|
|
||||||
unsigned long secs_w;
|
|
||||||
unsigned long secs_rg;
|
|
||||||
unsigned long secs_r;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct packet_cdrw
|
|
||||||
{
|
|
||||||
struct list_head pkt_free_list;
|
|
||||||
struct list_head pkt_active_list;
|
|
||||||
spinlock_t active_list_lock; /* Serialize access to pkt_active_list */
|
|
||||||
struct task_struct *thread;
|
|
||||||
atomic_t pending_bios;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Switch to high speed reading after reading this many kilobytes
|
|
||||||
* with no interspersed writes.
|
|
||||||
*/
|
|
||||||
#define HI_SPEED_SWITCH 512
|
|
||||||
|
|
||||||
struct packet_iosched
|
|
||||||
{
|
|
||||||
atomic_t attention; /* Set to non-zero when queue processing is needed */
|
|
||||||
int writing; /* Non-zero when writing, zero when reading */
|
|
||||||
spinlock_t lock; /* Protecting read/write queue manipulations */
|
|
||||||
struct bio_list read_queue;
|
|
||||||
struct bio_list write_queue;
|
|
||||||
sector_t last_write; /* The sector where the last write ended */
|
|
||||||
int successive_reads;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 32 buffers of 2048 bytes
|
|
||||||
*/
|
|
||||||
#if (PAGE_SIZE % CD_FRAMESIZE) != 0
|
|
||||||
#error "PAGE_SIZE must be a multiple of CD_FRAMESIZE"
|
|
||||||
#endif
|
|
||||||
#define PACKET_MAX_SIZE 128
|
|
||||||
#define FRAMES_PER_PAGE (PAGE_SIZE / CD_FRAMESIZE)
|
|
||||||
#define PACKET_MAX_SECTORS (PACKET_MAX_SIZE * CD_FRAMESIZE >> 9)
|
|
||||||
|
|
||||||
enum packet_data_state {
|
|
||||||
PACKET_IDLE_STATE, /* Not used at the moment */
|
|
||||||
PACKET_WAITING_STATE, /* Waiting for more bios to arrive, so */
|
|
||||||
/* we don't have to do as much */
|
|
||||||
/* data gathering */
|
|
||||||
PACKET_READ_WAIT_STATE, /* Waiting for reads to fill in holes */
|
|
||||||
PACKET_WRITE_WAIT_STATE, /* Waiting for the write to complete */
|
|
||||||
PACKET_RECOVERY_STATE, /* Recover after read/write errors */
|
|
||||||
PACKET_FINISHED_STATE, /* After write has finished */
|
|
||||||
|
|
||||||
PACKET_NUM_STATES /* Number of possible states */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Information needed for writing a single packet
|
|
||||||
*/
|
|
||||||
struct pktcdvd_device;
|
|
||||||
|
|
||||||
struct packet_data
|
|
||||||
{
|
|
||||||
struct list_head list;
|
|
||||||
|
|
||||||
spinlock_t lock; /* Lock protecting state transitions and */
|
|
||||||
/* orig_bios list */
|
|
||||||
|
|
||||||
struct bio_list orig_bios; /* Original bios passed to pkt_make_request */
|
|
||||||
/* that will be handled by this packet */
|
|
||||||
int write_size; /* Total size of all bios in the orig_bios */
|
|
||||||
/* list, measured in number of frames */
|
|
||||||
|
|
||||||
struct bio *w_bio; /* The bio we will send to the real CD */
|
|
||||||
/* device once we have all data for the */
|
|
||||||
/* packet we are going to write */
|
|
||||||
sector_t sector; /* First sector in this packet */
|
|
||||||
int frames; /* Number of frames in this packet */
|
|
||||||
|
|
||||||
enum packet_data_state state; /* Current state */
|
|
||||||
atomic_t run_sm; /* Incremented whenever the state */
|
|
||||||
/* machine needs to be run */
|
|
||||||
long sleep_time; /* Set this to non-zero to make the state */
|
|
||||||
/* machine run after this many jiffies. */
|
|
||||||
|
|
||||||
atomic_t io_wait; /* Number of pending IO operations */
|
|
||||||
atomic_t io_errors; /* Number of read/write errors during IO */
|
|
||||||
|
|
||||||
struct bio *r_bios[PACKET_MAX_SIZE]; /* bios to use during data gathering */
|
|
||||||
struct page *pages[PACKET_MAX_SIZE / FRAMES_PER_PAGE];
|
|
||||||
|
|
||||||
int cache_valid; /* If non-zero, the data for the zone defined */
|
|
||||||
/* by the sector variable is completely cached */
|
|
||||||
/* in the pages[] vector. */
|
|
||||||
|
|
||||||
int id; /* ID number for debugging */
|
|
||||||
struct pktcdvd_device *pd;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct pkt_rb_node {
|
|
||||||
struct rb_node rb_node;
|
|
||||||
struct bio *bio;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct packet_stacked_data
|
|
||||||
{
|
|
||||||
struct bio *bio; /* Original read request bio */
|
|
||||||
struct pktcdvd_device *pd;
|
|
||||||
};
|
|
||||||
#define PSD_POOL_SIZE 64
|
|
||||||
|
|
||||||
struct pktcdvd_device
|
|
||||||
{
|
|
||||||
struct file *bdev_file; /* dev attached */
|
|
||||||
/* handle acquired for bdev during pkt_open_dev() */
|
|
||||||
struct file *f_open_bdev;
|
|
||||||
dev_t pkt_dev; /* our dev */
|
|
||||||
struct packet_settings settings;
|
|
||||||
struct packet_stats stats;
|
|
||||||
int refcnt; /* Open count */
|
|
||||||
int write_speed; /* current write speed, kB/s */
|
|
||||||
int read_speed; /* current read speed, kB/s */
|
|
||||||
unsigned long offset; /* start offset */
|
|
||||||
__u8 mode_offset; /* 0 / 8 */
|
|
||||||
__u8 type;
|
|
||||||
unsigned long flags;
|
|
||||||
__u16 mmc3_profile;
|
|
||||||
__u32 nwa; /* next writable address */
|
|
||||||
__u32 lra; /* last recorded address */
|
|
||||||
struct packet_cdrw cdrw;
|
|
||||||
wait_queue_head_t wqueue;
|
|
||||||
|
|
||||||
spinlock_t lock; /* Serialize access to bio_queue */
|
|
||||||
struct rb_root bio_queue; /* Work queue of bios we need to handle */
|
|
||||||
int bio_queue_size; /* Number of nodes in bio_queue */
|
|
||||||
bool congested; /* Someone is waiting for bio_queue_size
|
|
||||||
* to drop. */
|
|
||||||
sector_t current_sector; /* Keep track of where the elevator is */
|
|
||||||
atomic_t scan_queue; /* Set to non-zero when pkt_handle_queue */
|
|
||||||
/* needs to be run. */
|
|
||||||
mempool_t rb_pool; /* mempool for pkt_rb_node allocations */
|
|
||||||
|
|
||||||
struct packet_iosched iosched;
|
|
||||||
struct gendisk *disk;
|
|
||||||
|
|
||||||
int write_congestion_off;
|
|
||||||
int write_congestion_on;
|
|
||||||
|
|
||||||
struct device *dev; /* sysfs pktcdvd[0-7] dev */
|
|
||||||
|
|
||||||
struct dentry *dfs_d_root; /* debugfs: devname directory */
|
|
||||||
struct dentry *dfs_f_info; /* debugfs: info file */
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* __PKTCDVD_H */
|
|
Loading…
Add table
Reference in a new issue