|
|
1.1 root 1: #include <errno.h>
2:
3: #include <linux/fs.h>
4: #include <linux/kernel.h>
5: #include <asm/segment.h>
6:
7: #define NR_BLK_DEV ((sizeof (rd_blk))/(sizeof (rd_blk[0])))
8:
9: int block_write(int dev, long * pos, char * buf, int count)
10: {
11: int block = *pos / BLOCK_SIZE;
12: int offset = *pos % BLOCK_SIZE;
13: int chars;
14: int written = 0;
15: struct buffer_head * bh;
16: register char * p;
17:
18: while (count>0) {
19: bh = bread(dev,block);
20: if (!bh)
21: return written?written:-EIO;
22: chars = (count<BLOCK_SIZE) ? count : BLOCK_SIZE;
23: p = offset + bh->b_data;
24: offset = 0;
25: block++;
26: *pos += chars;
27: written += chars;
28: count -= chars;
29: while (chars-->0)
30: *(p++) = get_fs_byte(buf++);
31: bh->b_dirt = 1;
32: brelse(bh);
33: }
34: return written;
35: }
36:
37: int block_read(int dev, unsigned long * pos, char * buf, int count)
38: {
39: int block = *pos / BLOCK_SIZE;
40: int offset = *pos % BLOCK_SIZE;
41: int chars;
42: int read = 0;
43: struct buffer_head * bh;
44: register char * p;
45:
46: while (count>0) {
47: bh = bread(dev,block);
48: if (!bh)
49: return read?read:-EIO;
50: chars = (count<BLOCK_SIZE) ? count : BLOCK_SIZE;
51: p = offset + bh->b_data;
52: offset = 0;
53: block++;
54: *pos += chars;
55: read += chars;
56: count -= chars;
57: while (chars-->0)
58: put_fs_byte(*(p++),buf++);
59: bh->b_dirt = 1;
60: brelse(bh);
61: }
62: return read;
63: }
64:
65: extern void rw_hd(int rw, struct buffer_head * bh);
66:
67: typedef void (*blk_fn)(int rw, struct buffer_head * bh);
68:
69: static blk_fn rd_blk[]={
70: NULL, /* nodev */
71: NULL, /* dev mem */
72: NULL, /* dev fd */
73: rw_hd, /* dev hd */
74: NULL, /* dev ttyx */
75: NULL, /* dev tty */
76: NULL}; /* dev lp */
77:
78: void ll_rw_block(int rw, struct buffer_head * bh)
79: {
80: blk_fn blk_addr;
81: unsigned int major;
82:
83: if ((major=MAJOR(bh->b_dev)) >= NR_BLK_DEV || !(blk_addr=rd_blk[major]))
84: panic("Trying to read nonexistent block-device");
85: blk_addr(rw, bh);
86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.