lkml.org 
[lkml]   [2002]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
SubjectRe: [PATCH] Rework of /proc/stat
Date
Hi

would a patch like this not make more sense
i picked it up on this list a while ago i cannot remember who wrote it
fixed it a bit and it does much the same except it alows you to have
any number of block devices though it does not work with scsi properly yet.

diff against 2.4.18

>
> Hi,
> I've made a new version of IO statistics in kstat that remove the
> previous limitations of MAX_MAJOR. I've made tests on my machine only, so
could someone test it, please?
> Feedback welcome.
> Bye
> -jec
>
> Patch attached.
>
Index: v2.4/drivers/block/ll_rw_blk.c
diff -u v2.4/drivers/block/ll_rw_blk.c:1.1.1.2
v2.4/drivers/block/ll_rw_blk.c:1.1.1.2.2.1
--- v2.4/drivers/block/ll_rw_blk.c:1.1.1.2 Mon Feb 25 21:54:45 2002
+++ v2.4/drivers/block/ll_rw_blk.c Mon Feb 25 22:53:10 2002
@@ -183,7 +183,11 @@

if (count)
printk("blk_cleanup_queue: leaked requests (%d)\n", count);
-
+ /*
+ * free statistics structure
+ */
+ kfree(q->dk_stat);
+
memset(q, 0, sizeof(*q));
}

@@ -393,6 +397,8 @@
**/
void blk_init_queue(request_queue_t * q, request_fn_proc * rfn)
{
+ struct disk_stat * new;
+
INIT_LIST_HEAD(&q->queue_head);
elevator_init(&q->elevator, ELEVATOR_LINUS);
blk_init_free_list(q);
@@ -413,6 +419,15 @@
*/
q->plug_device_fn = generic_plug_device;
q->head_active = 1;
+ /*
+ * At last, allocate and initialize the statistics
+ */
+ new = kmalloc(sizeof(struct disk_stat), GFP_KERNEL);
+ if (new == NULL)
+ printk(KERN_ERR "blk_init_queue:error allocating statisitcs\n");
+ else
+ memset(new, 0, sizeof(struct disk_stat));
+ q->dk_stat = new;
}

#define blkdev_free_rq(list) list_entry((list)->next, struct request,
queue);
@@ -497,23 +512,18 @@
else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
}

-inline void drive_stat_acct (kdev_t dev, int rw,
+inline void drive_stat_acct (struct disk_stat * ds, int rw,
unsigned long nr_sectors, int new_io)
{
- unsigned int major = MAJOR(dev);
- unsigned int index;
-
- index = disk_index(dev);
- if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
+ if (ds == NULL)
return;

- kstat.dk_drive[major][index] += new_io;
if (rw == READ) {
- kstat.dk_drive_rio[major][index] += new_io;
- kstat.dk_drive_rblk[major][index] += nr_sectors;
+ ds->dk_drive_rio += new_io;
+ ds->dk_drive_rblk += nr_sectors;
} else if (rw == WRITE) {
- kstat.dk_drive_wio[major][index] += new_io;
- kstat.dk_drive_wblk[major][index] += nr_sectors;
+ ds->dk_drive_wio += new_io;
+ ds->dk_drive_wblk += nr_sectors;
} else
printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n");
}
@@ -529,7 +539,7 @@
static inline void add_request(request_queue_t * q, struct request * req,
struct list_head *insert_here)
{
- drive_stat_acct(req->rq_dev, req->cmd, req->nr_sectors, 1);
+ drive_stat_acct(q->dk_stat, req->cmd, req->nr_sectors, 1);

if (!q->plugged && q->head_active && insert_here == &q->queue_head) {
spin_unlock_irq(&io_request_lock);
@@ -703,7 +713,7 @@
req->bhtail = bh;
req->nr_sectors = req->hard_nr_sectors += count;
blk_started_io(count);
- drive_stat_acct(req->rq_dev, req->cmd, count, 0);
+ drive_stat_acct(q->dk_stat, req->cmd, count, 0);
attempt_back_merge(q, req, max_sectors, max_segments);
goto out;

@@ -720,7 +730,7 @@
req->sector = req->hard_sector = sector;
req->nr_sectors = req->hard_nr_sectors += count;
blk_started_io(count);
- drive_stat_acct(req->rq_dev, req->cmd, count, 0);
+ drive_stat_acct(q->dk_stat, req->cmd, count, 0);
attempt_front_merge(q, head, req, max_sectors, max_segments);
goto out;

Index: v2.4/drivers/ide/ide.c
diff -u v2.4/drivers/ide/ide.c:1.1.1.2 v2.4/drivers/ide/ide.c:1.1.1.2.2.1
--- v2.4/drivers/ide/ide.c:1.1.1.2 Mon Feb 25 21:55:52 2002
+++ v2.4/drivers/ide/ide.c Mon Feb 25 22:53:10 2002
@@ -1454,8 +1454,10 @@
request_queue_t *ide_get_queue (kdev_t dev)
{
ide_hwif_t *hwif = (ide_hwif_t *)blk_dev[MAJOR(dev)].data;
-
- return &hwif->drives[DEVICE_NR(dev) & 1].queue;
+ if (DEVICE_NR(dev) >= MAX_DRIVES)
+ return NULL;
+ else
+ return &hwif->drives[DEVICE_NR(dev)].queue;
}

/*
Index: v2.4/drivers/md/md.c
diff -u v2.4/drivers/md/md.c:1.1.1.2 v2.4/drivers/md/md.c:1.1.1.2.2.1
--- v2.4/drivers/md/md.c:1.1.1.2 Mon Feb 25 21:55:55 2002
+++ v2.4/drivers/md/md.c Mon Feb 25 22:53:10 2002
@@ -3308,12 +3308,15 @@
ITERATE_RDEV(mddev,rdev,tmp) {
int major = MAJOR(rdev->dev);
int idx = disk_index(rdev->dev);
-
+ request_queue_t * rq = blk_get_queue(rdev->dev);
+
if ((idx >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
continue;
-
- curr_events = kstat.dk_drive_rblk[major][idx] +
- kstat.dk_drive_wblk[major][idx] ;
+
+ if (rq == NULL || (rq->dk_stat == NULL))
+ continue;
+ curr_events = rq->dk_stat->dk_drive_rblk +
+ rq->dk_stat->dk_drive_wblk ;
curr_events -= sync_io[major][idx];
if ((curr_events - rdev->last_events) > 32) {
rdev->last_events = curr_events;
Index: v2.4/fs/proc/proc_misc.c
diff -u v2.4/fs/proc/proc_misc.c:1.1.1.1
v2.4/fs/proc/proc_misc.c:1.1.1.1.4.1
--- v2.4/fs/proc/proc_misc.c:1.1.1.1 Sun Jan 13 15:50:20 2002
+++ v2.4/fs/proc/proc_misc.c Mon Feb 25 22:53:10 2002
@@ -36,12 +36,12 @@
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/seq_file.h>
+#include <linux/blkdev.h>

#include <asm/uaccess.h>
#include <asm/pgtable.h>
#include <asm/io.h>

-
#define LOAD_INT(x) ((x) >> FSHIFT)
#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
/*
@@ -234,7 +234,23 @@
release: seq_release,
};
#endif
-
+static int show_disk_stat(char * page, int len, struct disk_stat * ds,
+ int major, int disk)
+{
+ int active = ds->dk_drive_rio + ds->dk_drive_wio +
+ ds->dk_drive_rblk + ds->dk_drive_wblk;
+ if (active)
+ len += sprintf(page + len,
+ "(%u,%u):(%u,%u,%u,%u,%u) ",
+ major, disk,
+ ds->dk_drive_rio + ds->dk_drive_wio,
+ ds->dk_drive_rio,
+ ds->dk_drive_rblk,
+ ds->dk_drive_wio,
+ ds->dk_drive_wblk
+ );
+ return len;
+}
static int kstat_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
@@ -284,21 +300,30 @@

len += sprintf(page + len, "\ndisk_io: ");

- for (major = 0; major < DK_MAX_MAJOR; major++) {
- for (disk = 0; disk < DK_MAX_DISK; disk++) {
- int active = kstat.dk_drive[major][disk] +
- kstat.dk_drive_rblk[major][disk] +
- kstat.dk_drive_wblk[major][disk];
- if (active)
- len += sprintf(page + len,
- "(%u,%u):(%u,%u,%u,%u,%u) ",
- major, disk,
- kstat.dk_drive[major][disk],
- kstat.dk_drive_rio[major][disk],
- kstat.dk_drive_rblk[major][disk],
- kstat.dk_drive_wio[major][disk],
- kstat.dk_drive_wblk[major][disk]
- );
+ for (major = 0; major < MAX_BLKDEV; major++) {
+ struct disk_stat * ds;
+
+ if (!(blk_dev[major].queue)){
+ ds = (BLK_DEFAULT_QUEUE(major))->dk_stat;
+ if (ds)
+ len = show_disk_stat(page, len, ds, major, 0);
+ }else {
+ request_queue_t * q;
+ struct gendisk * hd = get_gendisk(MKDEV(major,0));
+ int max_disk;
+ if (!hd)
+ continue;
+ max_disk = MINORMASK>>hd->minor_shift;
+
+ for (disk = 0; disk <= max_disk; disk++) {
+ q = blk_get_queue(MKDEV(major,disk<<hd->minor_shift));
+ if (!q)
+ continue;
+ ds = q->dk_stat;
+ if (!ds)
+ continue;
+ len = show_disk_stat(page, len, ds, major,disk);
+ }
}
}

Index: v2.4/include/linux/blkdev.h
diff -u v2.4/include/linux/blkdev.h:1.1.1.1
v2.4/include/linux/blkdev.h:1.1.1.1.4.1
--- v2.4/include/linux/blkdev.h:1.1.1.1 Sun Jan 13 15:50:24 2002
+++ v2.4/include/linux/blkdev.h Mon Feb 25 22:53:10 2002
@@ -71,6 +71,13 @@
struct list_head free;
};

+struct disk_stat{
+ unsigned int dk_drive_rio;
+ unsigned int dk_drive_wio;
+ unsigned int dk_drive_rblk;
+ unsigned int dk_drive_wblk;
+};
+
struct request_queue
{
/*
@@ -122,6 +129,10 @@
* Tasks wait here for free request
*/
wait_queue_head_t wait_for_request;
+ /*
+ * statistics
+ */
+ struct disk_stat * dk_stat;
};

struct blk_dev_struct {
@@ -186,7 +197,7 @@
#define blkdev_next_request(req) blkdev_entry_to_request((req)->queue.next)
#define blkdev_prev_request(req) blkdev_entry_to_request((req)->queue.prev)

-extern void drive_stat_acct (kdev_t dev, int rw,
+extern void drive_stat_acct (struct disk_stat *, int rw,
unsigned long nr_sectors, int new_io);

static inline int get_hardsect_size(kdev_t dev)
Index: v2.4/include/linux/kernel_stat.h
diff -u v2.4/include/linux/kernel_stat.h:1.1.1.1
v2.4/include/linux/kernel_stat.h:1.1.1.1.4.1
--- v2.4/include/linux/kernel_stat.h:1.1.1.1 Sun Jan 13 15:50:24 2002
+++ v2.4/include/linux/kernel_stat.h Mon Feb 25 22:53:10 2002
@@ -19,11 +19,6 @@
unsigned int per_cpu_user[NR_CPUS],
per_cpu_nice[NR_CPUS],
per_cpu_system[NR_CPUS];
- unsigned int dk_drive[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int dk_drive_rio[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int dk_drive_wio[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int dk_drive_rblk[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int dk_drive_wblk[DK_MAX_MAJOR][DK_MAX_DISK];
unsigned int pgpgin, pgpgout;
unsigned int pswpin, pswpout;
#if !defined(CONFIG_ARCH_S390)



begin 666 disk_io-stats.dat
M26YD97@Z('8R+C0O9')I=F5R<R]B;&]C:R]L;%]R=U]B;&LN8PID:69F("UU
M('8R+C0O9')I=F5R<R]B;&]C:R]L;%]R=U]B;&LN8SHQ+C$N,2XR('8R+C0O
M9')I=F5R<R]B;&]C:R]L;%]R=U]B;&LN8SHQ+C$N,2XR+C(N,0HM+2T@=C(N
M-"]D<FEV97)S+V)L;V-K+VQL7W)W7V)L:RYC.C$N,2XQ+C()36]N($9E8B R
M-2 R,3HU-#HT-2 R,# R"BLK*R!V,BXT+V1R:79E<G,O8FQO8VLO;&Q?<G=?
M8FQK+F,)36]N($9E8B R-2 R,CHU,SHQ," R,# R"D! ("TQ.#,L-R K,3@S
M+#$Q($! "B *( EI9B H8V]U;G0I"B )"7!R:6YT:R@B8FQK7V-L96%N=7!?
M<75E=64Z(&QE86ME9"!R97%U97-T<R H)60I7&XB+"!C;W5N="D["BT**PDO
M*@HK"2 J(&9R964@<W1A=&ES=&EC<R!S=')U8W1U<F4**PD@*B\**PEK9G)E
M92AQ+3YD:U]S=&%T*3L**PD*( EM96US970H<2P@,"P@<VEZ96]F*"IQ*2D[
M"B!]"B *0$ @+3,Y,RPV("LS.3<L."! 0 H@("HJ+PH@=F]I9"!B;&M?:6YI
M=%]Q=65U92AR97%U97-T7W%U975E7W0@*B!Q+"!R97%U97-T7V9N7W!R;V,@
M*B!R9FXI"B!["BL)<W1R=6-T(&1I<VM?<W1A=" J(&YE=SL)"BL*( E)3DE4
M7TQ)4U1?2$5!1"@F<2T^<75E=65?:&5A9"D["B )96QE=F%T;W)?:6YI="@F
M<2T^96QE=F%T;W(L($5,159!5$]27TQ)3E53*3L*( EB;&M?:6YI=%]F<F5E
M7VQI<W0H<2D["D! ("TT,3,L-B K-#$Y+#$U($! "B )("HO"B )<2T^<&QU
M9U]D979I8V5?9FX@"3T@9V5N97)I8U]P;'5G7V1E=FEC93L*( EQ+3YH96%D
M7V%C=&EV92 @(" )/2 Q.PHK"2\J( HK"2 J($%T(&QA<W0L(&%L;&]C871E
M(&%N9"!I;FET:6%L:7IE('1H92!S=&%T:7-T:6-S( HK"2 J+PHK"6YE=R ]
M(&MM86QL;V,H<VEZ96]F*'-T<G5C="!D:7-K7W-T870I+"!'1E!?2T523D5,
M*3L**PEI9B H;F5W(#T]($Y53$PI"BL)"7!R:6YT:RA+15).7T524B B8FQK
M7VEN:71?<75E=64Z97)R;W(@86QL;V-A=&EN9R!S=&%T:7-I=&-S7&XB*3L*
M*PEE;'-E"BL)"6UE;7-E="AN97<L(# L('-I>F5O9BAS=')U8W0@9&ES:U]S
M=&%T*2D["BL)<2T^9&M?<W1A=" ](&YE=SL*('T*( H@(V1E9FEN92!B;&MD
M979?9G)E95]R<2AL:7-T*2!L:7-T7V5N=')Y*"AL:7-T*2T^;F5X="P@<W1R
M=6-T(')E<75E<W0L('%U975E*3L*0$ @+30Y-RPR,R K-3$R+#$X($! "B )
M96QS92!R;U]B:71S6VUA:F]R75MM:6YO<B ^/B U72 F/2!^*#$@/#P@*&UI
M;F]R("8@,S$I*3L*('T*( HM:6YL:6YE('9O:60@9')I=F5?<W1A=%]A8V-T
M("AK9&5V7W0@9&5V+"!I;G0@<G<L"BMI;FQI;F4@=F]I9"!D<FEV95]S=&%T
M7V%C8W0@*'-T<G5C="!D:7-K7W-T870@*B!D<RP@:6YT(')W+ H@"0D)"75N
M<VEG;F5D(&QO;F<@;G)?<V5C=&]R<RP@:6YT(&YE=U]I;RD*('L*+0EU;G-I
M9VYE9"!I;G0@;6%J;W(@/2!-04I/4BAD978I.PHM"75N<VEG;F5D(&EN="!I
M;F1E>#L*+0HM"6EN9&5X(#T@9&ES:U]I;F1E>"AD978I.PHM"6EF("@H:6YD
M97@@/CT@1$M?34%87T1)4TLI('Q\("AM86IO<B ^/2!$2U]-05A?34%*3U(I
M*0HK"6EF("AD<R ]/2!.54Q,*0H@"0ER971U<FX["B *+0EK<W1A="YD:U]D
M<FEV95MM86IO<EU;:6YD97A=("L](&YE=U]I;SL*( EI9B H<G<@/3T@4D5!
M1"D@>PHM"0EK<W1A="YD:U]D<FEV95]R:6];;6%J;W)=6VEN9&5X72 K/2!N
M97=?:6\["BT)"6MS=&%T+F1K7V1R:79E7W)B;&M;;6%J;W)=6VEN9&5X72 K
M/2!N<E]S96-T;W)S.PHK"0ED<RT^9&M?9')I=F5?<FEO("L](&YE=U]I;SL*
M*PD)9',M/F1K7V1R:79E7W)B;&L@*ST@;G)?<V5C=&]R<SL*( E](&5L<V4@
M:68@*')W(#T](%=2251%*2!["BT)"6MS=&%T+F1K7V1R:79E7W=I;UMM86IO
M<EU;:6YD97A=("L](&YE=U]I;SL*+0D):W-T870N9&M?9')I=F5?=V)L:UMM
M86IO<EU;:6YD97A=("L](&YR7W-E8W1O<G,["BL)"61S+3YD:U]D<FEV95]W
M:6\@*ST@;F5W7VEO.PHK"0ED<RT^9&M?9')I=F5?=V)L:R K/2!N<E]S96-T
M;W)S.PH@"7T@96QS90H@"0EP<FEN=&LH2T523E]%4E(@(F1R:79E7W-T871?
M86-C=#H@8VUD(&YO="!2+U<_7&XB*3L*('T*0$ @+34R.2PW("LU,SDL-R!
M0 H@<W1A=&EC(&EN;&EN92!V;VED(&%D9%]R97%U97-T*')E<75E<W1?<75E
M=65?=" J('$L('-T<G5C="!R97%U97-T("H@<F5Q+ H@"0D)(" @(" @('-T
M<G5C="!L:7-T7VAE860@*FEN<V5R=%]H97)E*0H@>PHM"61R:79E7W-T871?
M86-C="AR97$M/G)Q7V1E=BP@<F5Q+3YC;60L(')E<2T^;G)?<V5C=&]R<RP@
M,2D["BL)9')I=F5?<W1A=%]A8V-T*'$M/F1K7W-T870L(')E<2T^8VUD+"!R
M97$M/FYR7W-E8W1O<G,L(#$I.PH@"B ):68@*"%Q+3YP;'5G9V5D("8F('$M
M/FAE861?86-T:79E("8F(&EN<V5R=%]H97)E(#T]("9Q+3YQ=65U95]H96%D
M*2!["B )"7-P:6Y?=6YL;V-K7VER<2@F:6]?<F5Q=65S=%]L;V-K*3L*0$ @
M+3<P,RPW("LW,3,L-R! 0 H@"0D)<F5Q+3YB:'1A:6P@/2!B:#L*( D)"7)E
M<2T^;G)?<V5C=&]R<R ](')E<2T^:&%R9%]N<E]S96-T;W)S("L](&-O=6YT
M.PH@"0D)8FQK7W-T87)T961?:6\H8V]U;G0I.PHM"0D)9')I=F5?<W1A=%]A
M8V-T*')E<2T^<G%?9&5V+"!R97$M/F-M9"P@8V]U;G0L(# I.PHK"0D)9')I
M=F5?<W1A=%]A8V-T*'$M/F1K7W-T870L(')E<2T^8VUD+"!C;W5N="P@,"D[
M"B )"0EA='1E;7!T7V)A8VM?;65R9V4H<2P@<F5Q+"!M87A?<V5C=&]R<RP@
M;6%X7W-E9VUE;G1S*3L*( D)"6=O=&\@;W5T.PH@"D! ("TW,C L-R K-S,P
M+#<@0$ *( D)"7)E<2T^<V5C=&]R(#T@<F5Q+3YH87)D7W-E8W1O<B ]('-E
M8W1O<CL*( D)"7)E<2T^;G)?<V5C=&]R<R ](')E<2T^:&%R9%]N<E]S96-T
M;W)S("L](&-O=6YT.PH@"0D)8FQK7W-T87)T961?:6\H8V]U;G0I.PHM"0D)
M9')I=F5?<W1A=%]A8V-T*')E<2T^<G%?9&5V+"!R97$M/F-M9"P@8V]U;G0L
M(# I.PHK"0D)9')I=F5?<W1A=%]A8V-T*'$M/F1K7W-T870L(')E<2T^8VUD
M+"!C;W5N="P@,"D["B )"0EA='1E;7!T7V9R;VYT7VUE<F=E*'$L(&AE860L
M(')E<2P@;6%X7W-E8W1O<G,L(&UA>%]S96=M96YT<RD["B )"0EG;W1O(&]U
M=#L*( I);F1E>#H@=C(N-"]D<FEV97)S+VED92]I9&4N8PID:69F("UU('8R
M+C0O9')I=F5R<R]I9&4O:61E+F,Z,2XQ+C$N,B!V,BXT+V1R:79E<G,O:61E
M+VED92YC.C$N,2XQ+C(N,BXQ"BTM+2!V,BXT+V1R:79E<G,O:61E+VED92YC
M.C$N,2XQ+C()36]N($9E8B R-2 R,3HU-3HU,B R,# R"BLK*R!V,BXT+V1R
M:79E<G,O:61E+VED92YC"4UO;B!&96(@,C4@,C(Z-3,Z,3 @,C P,@I 0" M
M,30U-"PX("LQ-#4T+#$P($! "B!R97%U97-T7W%U975E7W0@*FED95]G971?
M<75E=64@*&MD979?="!D978I"B!["B ):61E7VAW:69?=" J:'=I9B ]("AI
M9&5?:'=I9E]T("HI8FQK7V1E=EM-04I/4BAD978I72YD871A.PHM"BT)<F5T
M=7)N("9H=VEF+3YD<FEV97-;1$5624-%7TY2*&1E=BD@)B Q72YQ=65U93L*
M*PEI9B H1$5624-%7TY2*&1E=BD@/CT@34%87T12259%4RD**PD)(')E='5R
M;B!.54Q,.PHK"65L<V4@"BL)"7)E='5R;B F:'=I9BT^9')I=F5S6T1%5DE#
M15].4BAD978I72YQ=65U93L*('T*( H@+RH*26YD97@Z('8R+C0O9')I=F5R
M<R]M9"]M9"YC"F1I9F8@+74@=C(N-"]D<FEV97)S+VUD+VUD+F,Z,2XQ+C$N
M,B!V,BXT+V1R:79E<G,O;60O;60N8SHQ+C$N,2XR+C(N,0HM+2T@=C(N-"]D
M<FEV97)S+VUD+VUD+F,Z,2XQ+C$N,@E-;VX@1F5B(#(U(#(Q.C4U.C4U(#(P
M,#(**RLK('8R+C0O9')I=F5R<R]M9"]M9"YC"4UO;B!&96(@,C4@,C(Z-3,Z
M,3 @,C P,@I 0" M,S,P."PQ,B K,S,P."PQ-2! 0 H@"4E415)!5$5?4D1%
M5BAM9&1E=BQR9&5V+'1M<"D@>PH@"0EI;G0@;6%J;W(@/2!-04I/4BAR9&5V
M+3YD978I.PH@"0EI;G0@:61X(#T@9&ES:U]I;F1E>"AR9&5V+3YD978I.PHM
M"BL)"7)E<75E<W1?<75E=65?=" J(')Q(#T@8FQK7V=E=%]Q=65U92AR9&5V
M+3YD978I.PHK"0D*( D):68@*"AI9'@@/CT@1$M?34%87T1)4TLI('Q\("AM
M86IO<B ^/2!$2U]-05A?34%*3U(I*0H@"0D)8V]N=&EN=64["BT*+0D)8W5R
M<E]E=F5N=',@/2!K<W1A="YD:U]D<FEV95]R8FQK6VUA:F]R75MI9'A=("L*
M+0D)"0D)"6MS=&%T+F1K7V1R:79E7W=B;&M;;6%J;W)=6VED>%T@.PHK"0D*
M*PD):68@*')Q(#T]($Y53$P@?'P@*')Q+3YD:U]S=&%T(#T]($Y53$PI*0HK
M"0D)8V]N=&EN=64["BL)"6-U<G)?979E;G1S(#T@<G$M/F1K7W-T870M/F1K
M7V1R:79E7W)B;&L@*R **PD)"7)Q+3YD:U]S=&%T+3YD:U]D<FEV95]W8FQK
M(#L*( D)8W5R<E]E=F5N=',@+3T@<WEN8U]I;UMM86IO<EU;:61X73L*( D)
M:68@*"AC=7)R7V5V96YT<R M(')D978M/FQA<W1?979E;G1S*2 ^(#,R*2![
M"B )"0ER9&5V+3YL87-T7V5V96YT<R ](&-U<G)?979E;G1S.PI);F1E>#H@
M=C(N-"]F<R]P<F]C+W!R;V-?;6ES8RYC"F1I9F8@+74@=C(N-"]F<R]P<F]C
M+W!R;V-?;6ES8RYC.C$N,2XQ+C$@=C(N-"]F<R]P<F]C+W!R;V-?;6ES8RYC
M.C$N,2XQ+C$N-"XQ"BTM+2!V,BXT+V9S+W!R;V,O<')O8U]M:7-C+F,Z,2XQ
M+C$N,0E3=6X@2F%N(#$S(#$U.C4P.C(P(#(P,#(**RLK('8R+C0O9G,O<')O
M8R]P<F]C7VUI<V,N8PE-;VX@1F5B(#(U(#(R.C4S.C$P(#(P,#(*0$ @+3,V
M+#$R("LS-BPQ,B! 0 H@(VEN8VQU9&4@/&QI;G5X+VEN:70N:#X*("-I;F-L
M=61E(#QL:6YU>"]S;7!?;&]C:RYH/@H@(VEN8VQU9&4@/&QI;G5X+W-E<5]F
M:6QE+F@^"BLC:6YC;'5D92 \;&EN=7@O8FQK9&5V+F@^"B *("-I;F-L=61E
M(#QA<VTO=6%C8V5S<RYH/@H@(VEN8VQU9&4@/&%S;2]P9W1A8FQE+F@^"B C
M:6YC;'5D92 \87-M+VEO+F@^"B *+0H@(V1E9FEN92!,3T%$7TE.5"AX*2 H
M*'@I(#X^($932$E&5"D*("-D969I;F4@3$]!1%]&4D%#*'@I($Q/041?24Y4
M*"@H>"D@)B H1DE8141?,2TQ*2D@*B Q,# I"B O*@I 0" M,C,T+#<@*S(S
M-"PR,R! 0 H@"7)E;&5A<V4Z"7-E<5]R96QE87-E+ H@?3L*("-E;F1I9@HM
M"BMS=&%T:6,@:6YT('-H;W=?9&ES:U]S=&%T*&-H87(@*B!P86=E+"!I;G0@
M;&5N+"!S=')U8W0@9&ES:U]S=&%T("H@9',L"BL)"0D)"6EN="!M86IO<BP@
M:6YT(&1I<VLI"BM["BL):6YT(&%C=&EV92 ](&1S+3YD:U]D<FEV95]R:6\@
M*R!D<RT^9&M?9')I=F5?=VEO("L**PD)(&1S+3YD:U]D<FEV95]R8FQK("L@
M9',M/F1K7V1R:79E7W=B;&L["BL):68@*&%C=&EV92D**PD);&5N("L]('-P
M<FEN=&8H<&%G92 K(&QE;BP**PD)"2(H)74L)74I.B@E=2PE=2PE=2PE=2PE
M=2D@(BP**PD)"6UA:F]R+"!D:7-K+ HK"0D)9',M/F1K7V1R:79E7W)I;R K
M(&1S+3YD:U]D<FEV95]W:6\L"BL)"0ED<RT^9&M?9')I=F5?<FEO+ HK"0D)
M9',M/F1K7V1R:79E7W)B;&LL"BL)"0ED<RT^9&M?9')I=F5?=VEO+ HK"0D)
M9',M/F1K7V1R:79E7W=B;&L**PD)*3L**PER971U<FX@;&5N.PHK?0H@<W1A
M=&EC(&EN="!K<W1A=%]R96%D7W!R;V,H8VAA<B J<&%G92P@8VAA<B J*G-T
M87)T+"!O9F9?="!O9F8L"B )"0D)(&EN="!C;W5N="P@:6YT("IE;V8L('9O
M:60@*F1A=&$I"B!["D! ("TR.#0L,C$@*S,P,"PS,"! 0 H@"B );&5N("L]
M('-P<FEN=&8H<&%G92 K(&QE;BP@(EQN9&ES:U]I;SH@(BD["B *+0EF;W(@
M*&UA:F]R(#T@,#L@;6%J;W(@/"!$2U]-05A?34%*3U([(&UA:F]R*RLI('L*
M+0D)9F]R("AD:7-K(#T@,#L@9&ES:R \($1+7TU!6%]$25-+.R!D:7-K*RLI
M('L*+0D)"6EN="!A8W1I=F4@/2!K<W1A="YD:U]D<FEV95MM86IO<EU;9&ES
M:UT@*PHM"0D)"6MS=&%T+F1K7V1R:79E7W)B;&M;;6%J;W)=6V1I<VM=("L*
M+0D)"0EK<W1A="YD:U]D<FEV95]W8FQK6VUA:F]R75MD:7-K73L*+0D)"6EF
M("AA8W1I=F4I"BT)"0D);&5N("L]('-P<FEN=&8H<&%G92 K(&QE;BP*+0D)
M"0D)(B@E=2PE=2DZ*"5U+"5U+"5U+"5U+"5U*2 B+ HM"0D)"0EM86IO<BP@
M9&ES:RP*+0D)"0D):W-T870N9&M?9')I=F5;;6%J;W)=6V1I<VM=+ HM"0D)
M"0EK<W1A="YD:U]D<FEV95]R:6];;6%J;W)=6V1I<VM=+ HM"0D)"0EK<W1A
M="YD:U]D<FEV95]R8FQK6VUA:F]R75MD:7-K72P*+0D)"0D):W-T870N9&M?
M9')I=F5?=VEO6VUA:F]R75MD:7-K72P*+0D)"0D):W-T870N9&M?9')I=F5?
M=V)L:UMM86IO<EU;9&ES:UT*+0D)"2D["BL)9F]R("AM86IO<B ](# [(&UA
M:F]R(#P@34%87T),2T1%5CL@;6%J;W(K*RD@>PHK"0ES=')U8W0@9&ES:U]S
M=&%T("H@9',["BL)"0HK"0EI9B H(2AB;&M?9&5V6VUA:F]R72YQ=65U92DI
M>PHK"0D)9',@/2 H0DQ+7T1%1D%53%1?455%544H;6%J;W(I*2T^9&M?<W1A
M=#L**PD)"6EF("AD<RD**PD)"0EL96X@/2!S:&]W7V1I<VM?<W1A="AP86=E
M+"!L96XL(&1S+"!M86IO<BP@,"D["BL)"7UE;'-E('L**PD)"7)E<75E<W1?
M<75E=65?=" J('$["BL)"0ES=')U8W0@9V5N9&ES:R J(&AD(#T@9V5T7V=E
M;F1I<VLH34M$158H;6%J;W(L,"DI.PHK"0D):6YT(&UA>%]D:7-K.PHK"0D)
M:68@*"%H9"D**PD)"0EC;VYT:6YU93L**PD)"6UA>%]D:7-K(#T@34E.3U)-
M05-+/CYH9"T^;6EN;W)?<VAI9G0["BL**PD)"69O<B H9&ES:R ](# [(&1I
M<VL@/#T@;6%X7V1I<VL[(&1I<VLK*RD@>PHK"0D)"7$@/2!B;&M?9V5T7W%U
M975E*$U+1$56*&UA:F]R+&1I<VL\/&AD+3YM:6YO<E]S:&EF="DI.PHK"0D)
M"6EF("@A<2D@"BL)"0D)"6-O;G1I;G5E.PHK"0D)"61S(#T@<2T^9&M?<W1A
M=#L**PD)"0EI9B H(61S*0HK"0D)"0EC;VYT:6YU93L**PD)"0EL96X@/2!S
M:&]W7V1I<VM?<W1A="AP86=E+"!L96XL(&1S+"!M86IO<BQD:7-K*3L**PD)
M"7T*( D)?0H@"7T*( I);F1E>#H@=C(N-"]I;F-L=61E+VQI;G5X+V)L:V1E
M=BYH"F1I9F8@+74@=C(N-"]I;F-L=61E+VQI;G5X+V)L:V1E=BYH.C$N,2XQ
M+C$@=C(N-"]I;F-L=61E+VQI;G5X+V)L:V1E=BYH.C$N,2XQ+C$N-"XQ"BTM
M+2!V,BXT+VEN8VQU9&4O;&EN=7@O8FQK9&5V+F@Z,2XQ+C$N,0E3=6X@2F%N
M(#$S(#$U.C4P.C(T(#(P,#(**RLK('8R+C0O:6YC;'5D92]L:6YU>"]B;&MD
M978N: E-;VX@1F5B(#(U(#(R.C4S.C$P(#(P,#(*0$ @+3<Q+#8@*S<Q+#$S
M($! "B )<W1R=6-T(&QI<W1?:&5A9"!F<F5E.PH@?3L*( HK<W1R=6-T(&1I
M<VM?<W1A='L**PEU;G-I9VYE9"!I;G0@9&M?9')I=F5?<FEO.PHK"75N<VEG
M;F5D(&EN="!D:U]D<FEV95]W:6\["BL)=6YS:6=N960@:6YT(&1K7V1R:79E
M7W)B;&L["BL)=6YS:6=N960@:6YT(&1K7V1R:79E7W=B;&L["BM].PHK"B!S
M=')U8W0@<F5Q=65S=%]Q=65U90H@>PH@"2\J"D! ("TQ,C(L-B K,3(Y+#$P
M($! "B )("H@5&%S:W,@=V%I="!H97)E(&9O<B!F<F5E(')E<75E<W0*( D@
M*B\*( EW86ET7W%U975E7VAE861?= EW86ET7V9O<E]R97%U97-T.PHK"2\J
M"BL)("H@<W1A=&ES=&EC<PHK"2 J+PHK"7-T<G5C="!D:7-K7W-T870@*B!D
M:U]S=&%T.PH@?3L*( H@<W1R=6-T(&)L:U]D979?<W1R=6-T('L*0$ @+3$X
M-BPW("LQ.3<L-R! 0 H@(V1E9FEN92!B;&MD979?;F5X=%]R97%U97-T*')E
M<2D@8FQK9&5V7V5N=')Y7W1O7W)E<75E<W0H*')E<2DM/G%U975E+FYE>'0I
M"B C9&5F:6YE(&)L:V1E=E]P<F5V7W)E<75E<W0H<F5Q*2!B;&MD979?96YT
M<GE?=&]?<F5Q=65S="@H<F5Q*2T^<75E=64N<')E=BD*( HM97AT97)N('9O
M:60@9')I=F5?<W1A=%]A8V-T("AK9&5V7W0@9&5V+"!I;G0@<G<L"BME>'1E
M<FX@=F]I9"!D<FEV95]S=&%T7V%C8W0@*'-T<G5C="!D:7-K7W-T870@*BP@
M:6YT(')W+ H@"0D)"0EU;G-I9VYE9"!L;VYG(&YR7W-E8W1O<G,L(&EN="!N
M97=?:6\I.PH@"B!S=&%T:6,@:6YL:6YE(&EN="!G971?:&%R9'-E8W1?<VEZ
M92AK9&5V7W0@9&5V*0I);F1E>#H@=C(N-"]I;F-L=61E+VQI;G5X+VME<FYE
M;%]S=&%T+F@*9&EF9B M=2!V,BXT+VEN8VQU9&4O;&EN=7@O:V5R;F5L7W-T
M870N:#HQ+C$N,2XQ('8R+C0O:6YC;'5D92]L:6YU>"]K97)N96Q?<W1A="YH
M.C$N,2XQ+C$N-"XQ"BTM+2!V,BXT+VEN8VQU9&4O;&EN=7@O:V5R;F5L7W-T
M870N:#HQ+C$N,2XQ"5-U;B!*86X@,3,@,34Z-3 Z,C0@,C P,@HK*RL@=C(N
M-"]I;F-L=61E+VQI;G5X+VME<FYE;%]S=&%T+F@)36]N($9E8B R-2 R,CHU
M,SHQ," R,# R"D! ("TQ.2PQ,2 K,3DL-B! 0 H@"75N<VEG;F5D(&EN="!P
M97)?8W!U7W5S97);3E)?0U!54UTL"B )(" @(" @(" @(" @('!E<E]C<'5?
M;FEC95M.4E]#4%5372P*( D@(" @(" @(" @(" @<&5R7V-P=5]S>7-T96U;
M3E)?0U!54UT["BT)=6YS:6=N960@:6YT(&1K7V1R:79E6T1+7TU!6%]-04I/
M4EU;1$M?34%87T1)4TM=.PHM"75N<VEG;F5D(&EN="!D:U]D<FEV95]R:6];
M1$M?34%87TU!2D]275M$2U]-05A?1$E32UT["BT)=6YS:6=N960@:6YT(&1K
M7V1R:79E7W=I;UM$2U]-05A?34%*3U)=6T1+7TU!6%]$25-+73L*+0EU;G-I
M9VYE9"!I;G0@9&M?9')I=F5?<F)L:UM$2U]-05A?34%*3U)=6T1+7TU!6%]$
M25-+73L*+0EU;G-I9VYE9"!I;G0@9&M?9')I=F5?=V)L:UM$2U]-05A?34%*
M3U)=6T1+7TU!6%]$25-+73L*( EU;G-I9VYE9"!I;G0@<&=P9VEN+"!P9W!G
M;W5T.PH@"75N<VEG;F5D(&EN="!P<W=P:6XL('!S=W!O=70["B C:68@(61E
89FEN960H0T].1DE'7T%20TA?4S,Y,"D*
`
end

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:24    [W:0.120 / U:9.776 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site