diff options
-rw-r--r-- | Documentation/ABI/testing/debugfs-pktcdvd | 5 | ||||
-rw-r--r-- | Documentation/ABI/testing/sysfs-class-pktcdvd | 2 | ||||
-rw-r--r-- | Documentation/cdrom/packet-writing.txt | 2 | ||||
-rw-r--r-- | drivers/block/pktcdvd.c | 26 |
4 files changed, 11 insertions, 24 deletions
diff --git a/Documentation/ABI/testing/debugfs-pktcdvd b/Documentation/ABI/testing/debugfs-pktcdvd index 03dbd883cc41..bf9c16b64c34 100644 --- a/Documentation/ABI/testing/debugfs-pktcdvd +++ b/Documentation/ABI/testing/debugfs-pktcdvd | |||
@@ -1,6 +1,6 @@ | |||
1 | What: /debug/pktcdvd/pktcdvd[0-7] | 1 | What: /debug/pktcdvd/pktcdvd[0-7] |
2 | Date: Oct. 2006 | 2 | Date: Oct. 2006 |
3 | KernelVersion: 2.6.19 | 3 | KernelVersion: 2.6.20 |
4 | Contact: Thomas Maier <balagi@justmail.de> | 4 | Contact: Thomas Maier <balagi@justmail.de> |
5 | Description: | 5 | Description: |
6 | 6 | ||
@@ -11,8 +11,7 @@ The pktcdvd module (packet writing driver) creates | |||
11 | these files in debugfs: | 11 | these files in debugfs: |
12 | 12 | ||
13 | /debug/pktcdvd/pktcdvd[0-7]/ | 13 | /debug/pktcdvd/pktcdvd[0-7]/ |
14 | info (0444) Lots of human readable driver | 14 | info (0444) Lots of driver statistics and infos. |
15 | statistics and infos. Multiple lines! | ||
16 | 15 | ||
17 | Example: | 16 | Example: |
18 | ------- | 17 | ------- |
diff --git a/Documentation/ABI/testing/sysfs-class-pktcdvd b/Documentation/ABI/testing/sysfs-class-pktcdvd index c4c55edc9a5c..b1c3f0263359 100644 --- a/Documentation/ABI/testing/sysfs-class-pktcdvd +++ b/Documentation/ABI/testing/sysfs-class-pktcdvd | |||
@@ -1,6 +1,6 @@ | |||
1 | What: /sys/class/pktcdvd/ | 1 | What: /sys/class/pktcdvd/ |
2 | Date: Oct. 2006 | 2 | Date: Oct. 2006 |
3 | KernelVersion: 2.6.19 | 3 | KernelVersion: 2.6.20 |
4 | Contact: Thomas Maier <balagi@justmail.de> | 4 | Contact: Thomas Maier <balagi@justmail.de> |
5 | Description: | 5 | Description: |
6 | 6 | ||
diff --git a/Documentation/cdrom/packet-writing.txt b/Documentation/cdrom/packet-writing.txt index 7715d2247c4d..cf1f8126991c 100644 --- a/Documentation/cdrom/packet-writing.txt +++ b/Documentation/cdrom/packet-writing.txt | |||
@@ -93,7 +93,7 @@ Notes | |||
93 | Using the pktcdvd sysfs interface | 93 | Using the pktcdvd sysfs interface |
94 | --------------------------------- | 94 | --------------------------------- |
95 | 95 | ||
96 | Since Linux 2.6.19, the pktcdvd module has a sysfs interface | 96 | Since Linux 2.6.20, the pktcdvd module has a sysfs interface |
97 | and can be controlled by it. For example the "pktcdvd" tool uses | 97 | and can be controlled by it. For example the "pktcdvd" tool uses |
98 | this interface. (see http://people.freenet.de/BalaGi#pktcdvd ) | 98 | this interface. (see http://people.freenet.de/BalaGi#pktcdvd ) |
99 | 99 | ||
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c index 62462190e07e..c0e89490e3d5 100644 --- a/drivers/block/pktcdvd.c +++ b/drivers/block/pktcdvd.c | |||
@@ -190,15 +190,6 @@ static struct attribute *kobj_pkt_attrs_wqueue[] = { | |||
190 | NULL | 190 | NULL |
191 | }; | 191 | }; |
192 | 192 | ||
193 | /* declares a char buffer[64] _dbuf, copies data from | ||
194 | * _b with length _l into it and ensures that _dbuf ends | ||
195 | * with a \0 character. | ||
196 | */ | ||
197 | #define DECLARE_BUF_AS_STRING(_dbuf, _b, _l) \ | ||
198 | char _dbuf[64]; int dlen = (_l) < 0 ? 0 : (_l); \ | ||
199 | if (dlen >= sizeof(_dbuf)) dlen = sizeof(_dbuf)-1; \ | ||
200 | memcpy(_dbuf, _b, dlen); _dbuf[dlen] = 0 | ||
201 | |||
202 | static ssize_t kobj_pkt_show(struct kobject *kobj, | 193 | static ssize_t kobj_pkt_show(struct kobject *kobj, |
203 | struct attribute *attr, char *data) | 194 | struct attribute *attr, char *data) |
204 | { | 195 | { |
@@ -264,9 +255,8 @@ static ssize_t kobj_pkt_store(struct kobject *kobj, | |||
264 | { | 255 | { |
265 | struct pktcdvd_device *pd = to_pktcdvdkobj(kobj)->pd; | 256 | struct pktcdvd_device *pd = to_pktcdvdkobj(kobj)->pd; |
266 | int val; | 257 | int val; |
267 | DECLARE_BUF_AS_STRING(dbuf, data, len); /* ensure sscanf scans a string */ | ||
268 | 258 | ||
269 | if (strcmp(attr->name, "reset") == 0 && dlen > 0) { | 259 | if (strcmp(attr->name, "reset") == 0 && len > 0) { |
270 | pd->stats.pkt_started = 0; | 260 | pd->stats.pkt_started = 0; |
271 | pd->stats.pkt_ended = 0; | 261 | pd->stats.pkt_ended = 0; |
272 | pd->stats.secs_w = 0; | 262 | pd->stats.secs_w = 0; |
@@ -274,7 +264,7 @@ static ssize_t kobj_pkt_store(struct kobject *kobj, | |||
274 | pd->stats.secs_r = 0; | 264 | pd->stats.secs_r = 0; |
275 | 265 | ||
276 | } else if (strcmp(attr->name, "congestion_off") == 0 | 266 | } else if (strcmp(attr->name, "congestion_off") == 0 |
277 | && sscanf(dbuf, "%d", &val) == 1) { | 267 | && sscanf(data, "%d", &val) == 1) { |
278 | spin_lock(&pd->lock); | 268 | spin_lock(&pd->lock); |
279 | pd->write_congestion_off = val; | 269 | pd->write_congestion_off = val; |
280 | init_write_congestion_marks(&pd->write_congestion_off, | 270 | init_write_congestion_marks(&pd->write_congestion_off, |
@@ -282,7 +272,7 @@ static ssize_t kobj_pkt_store(struct kobject *kobj, | |||
282 | spin_unlock(&pd->lock); | 272 | spin_unlock(&pd->lock); |
283 | 273 | ||
284 | } else if (strcmp(attr->name, "congestion_on") == 0 | 274 | } else if (strcmp(attr->name, "congestion_on") == 0 |
285 | && sscanf(dbuf, "%d", &val) == 1) { | 275 | && sscanf(data, "%d", &val) == 1) { |
286 | spin_lock(&pd->lock); | 276 | spin_lock(&pd->lock); |
287 | pd->write_congestion_on = val; | 277 | pd->write_congestion_on = val; |
288 | init_write_congestion_marks(&pd->write_congestion_off, | 278 | init_write_congestion_marks(&pd->write_congestion_off, |
@@ -369,8 +359,7 @@ static ssize_t class_pktcdvd_store_add(struct class *c, const char *buf, | |||
369 | size_t count) | 359 | size_t count) |
370 | { | 360 | { |
371 | unsigned int major, minor; | 361 | unsigned int major, minor; |
372 | DECLARE_BUF_AS_STRING(dbuf, buf, count); | 362 | if (sscanf(buf, "%u:%u", &major, &minor) == 2) { |
373 | if (sscanf(dbuf, "%u:%u", &major, &minor) == 2) { | ||
374 | pkt_setup_dev(MKDEV(major, minor), NULL); | 363 | pkt_setup_dev(MKDEV(major, minor), NULL); |
375 | return count; | 364 | return count; |
376 | } | 365 | } |
@@ -381,8 +370,7 @@ static ssize_t class_pktcdvd_store_remove(struct class *c, const char *buf, | |||
381 | size_t count) | 370 | size_t count) |
382 | { | 371 | { |
383 | unsigned int major, minor; | 372 | unsigned int major, minor; |
384 | DECLARE_BUF_AS_STRING(dbuf, buf, count); | 373 | if (sscanf(buf, "%u:%u", &major, &minor) == 2) { |
385 | if (sscanf(dbuf, "%u:%u", &major, &minor) == 2) { | ||
386 | pkt_remove_dev(MKDEV(major, minor)); | 374 | pkt_remove_dev(MKDEV(major, minor)); |
387 | return count; | 375 | return count; |
388 | } | 376 | } |
@@ -1377,7 +1365,7 @@ try_next_bio: | |||
1377 | && pd->bio_queue_size <= pd->write_congestion_off); | 1365 | && pd->bio_queue_size <= pd->write_congestion_off); |
1378 | spin_unlock(&pd->lock); | 1366 | spin_unlock(&pd->lock); |
1379 | if (wakeup) | 1367 | if (wakeup) |
1380 | blk_clear_queue_congested(pd->disk->queue, WRITE); | 1368 | clear_bdi_congested(&pd->disk->queue->backing_dev_info, WRITE); |
1381 | 1369 | ||
1382 | pkt->sleep_time = max(PACKET_WAIT_TIME, 1); | 1370 | pkt->sleep_time = max(PACKET_WAIT_TIME, 1); |
1383 | pkt_set_state(pkt, PACKET_WAITING_STATE); | 1371 | pkt_set_state(pkt, PACKET_WAITING_STATE); |
@@ -2598,7 +2586,7 @@ static int pkt_make_request(request_queue_t *q, struct bio *bio) | |||
2598 | spin_lock(&pd->lock); | 2586 | spin_lock(&pd->lock); |
2599 | if (pd->write_congestion_on > 0 | 2587 | if (pd->write_congestion_on > 0 |
2600 | && pd->bio_queue_size >= pd->write_congestion_on) { | 2588 | && pd->bio_queue_size >= pd->write_congestion_on) { |
2601 | blk_set_queue_congested(q, WRITE); | 2589 | set_bdi_congested(&q->backing_dev_info, WRITE); |
2602 | do { | 2590 | do { |
2603 | spin_unlock(&pd->lock); | 2591 | spin_unlock(&pd->lock); |
2604 | congestion_wait(WRITE, HZ); | 2592 | congestion_wait(WRITE, HZ); |