I have prepared a fix for LiS to prevent the large stack use by
lis_strioctl. It has improved our code and prevented at least one crash on
i386 and s390.

Here is the patch (against 2.16.15), please can you add it into the next
release of LiS (or equivalent code):

diff -Naur LiS-2.16/head/head.c LiS-2.16.fix/head/head.c
--- LiS-2.16/head/head.c        Fri Oct 10 20:57:37 2003
+++ LiS-2.16.fix/head/head.c    Thu Nov 13 13:54:08 2003
@@ -6835,29 +6835,33 @@
 
     case I_LIS_QRUN_STATS:
       {
-        lis_qrun_stats_t       stats ;
+        lis_qrun_stats_t* stats ;
 
-       err = lis_check_umem(f,VERIFY_WRITE, (char*)arg, sizeof(stats)) ; 
+
err=lis_check_umem(f,VERIFY_WRITE,(char*)arg,sizeof(lis_qrun_stats_t));
        if (err < 0)
            RTN(err);
 
-       stats.num_cpus = lis_num_cpus;
-       stats.num_qrunners = lis_atomic_read(&lis_runq_cnt) ;
-       stats.queues_running = lis_atomic_read(&lis_queues_running) ;
-       stats.runq_req_cnt = lis_atomic_read(&lis_runq_req_cnt) ;
-       memcpy(stats.runq_cnts, (void *)lis_runq_cnts,
sizeof(stats.runq_cnts));
-       memcpy(stats.queuerun_cnts, (void *)lis_queuerun_cnts,
-                                               sizeof(stats.queuerun_cnts))
;
-       memcpy(stats.active_flags, (void *)lis_runq_active_flags,
-                                               sizeof(stats.active_flags))
;
-       memcpy(stats.runq_pids, (void *)lis_runq_pids,
sizeof(stats.runq_pids));
-       memcpy(stats.runq_wakeups, (void *)lis_runq_wakeups,
-                                               sizeof(stats.runq_wakeups));
-       memcpy(stats.setqsched_cnts, (void *)lis_setqsched_cnts,
-                                           sizeof(stats.setqsched_cnts));
-       memcpy(stats.setqsched_isr_cnts, (void *)lis_setqsched_isr_cnts,
-
sizeof(stats.setqsched_isr_cnts));
-       err = lis_copyout(f,&stats,(char*)arg,sizeof(stats));
+        stats = (lis_qrun_stats_t*)ALLOCF(sizeof(lis_qrun_stats_t),"stats
");
+        if (stats == NULL)
+           RTN(-ENOMEM);
+       stats->num_cpus = lis_num_cpus;
+       stats->num_qrunners = lis_atomic_read(&lis_runq_cnt) ;
+       stats->queues_running = lis_atomic_read(&lis_queues_running) ;
+       stats->runq_req_cnt = lis_atomic_read(&lis_runq_req_cnt) ;
+       memcpy(stats->runq_cnts, (void *)lis_runq_cnts,
sizeof(stats->runq_cnts));
+       memcpy(stats->queuerun_cnts, (void *)lis_queuerun_cnts,
+
sizeof(stats->queuerun_cnts)) ;
+       memcpy(stats->active_flags, (void *)lis_runq_active_flags,
+                                               sizeof(stats->active_flags))
;
+       memcpy(stats->runq_pids, (void *)lis_runq_pids,
sizeof(stats->runq_pids));
+       memcpy(stats->runq_wakeups, (void *)lis_runq_wakeups,
+
sizeof(stats->runq_wakeups));
+       memcpy(stats->setqsched_cnts, (void *)lis_setqsched_cnts,
+                                           sizeof(stats->setqsched_cnts));
+       memcpy(stats->setqsched_isr_cnts, (void *)lis_setqsched_isr_cnts,
+
sizeof(stats->setqsched_isr_cnts));
+       err = lis_copyout(f,stats,(char*)arg,sizeof(lis_qrun_stats_t));
+        FREE(stats);
        RTN(err);
       }

____________________________________________________
Richard Hilditch
SNAP-IX Group
Data Connection Ltd.
Tel:    +44  20 8366 1177       Mail:   richard.hilditch at
dataconnection.com
Fax:    +44  20 8367 8501       Web:    http://www.dataconnection.com





_______________________________________________
Linux-streams mailing list
[EMAIL PROTECTED]
http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

Reply via email to