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