no need to do this. just get the fresh 2.6.8.1 kernel and compile it on FC2. everything will run OK now - shabanip
----- Original Message ----- From: "Micha? Mosiewicz" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, September 09, 2004 7:38 PM
Subject: [Asterisk-Dev] Kernel 2.6.8-1.521 from Fedora C2
I've noticed problems with zaptel on various kernel from Fedora C2. Most of
the time I had some core dumps from tools like ztcfg. My TDM400P cards
denied working.
I have found out that the problem was actually a UNIT(file) macro calculation. The way it is done, it returns very strange results without logic like for example 60909 at least on my "stock" Fedora C2 upgraded to the latest kernel.
Then I noticed that most functions with fingerprint like (struct inode *inode, struct file *file) could probably use inode directly instead of reaching it from file. Actually it appears that inode data is proper, i.e. it has a proper i_rdev value, proper i_ino value etc. As contrary file->f_dentry->d_inode seems to have some bogus data.
So, I changed all the function that used UNIT(file) calculation to MINOR(inode->i_rdev) whereever it was possible (i.e. wherever the function alread had inode parameter.
I'm not Linux kernel hacker, and I didn't traced those function to any
greater depth. Can somebody check this patch? I wonder why there are people
using FC2 and no one experienced such problems.
--- /usr/src/redhat/BUILD/zaptel-1.0-RC2/zaptel.c 2004-07-28 17:16:14.000000000 -0400 +++ ./zaptel.c 2004-09-09 10:30:16.000000000 -0400 @@ -99,7 +99,7 @@ #endif
/* macro-oni for determining a unit (channel) number */ -#define UNIT(file) MINOR(file->f_dentry->d_inode->i_rdev) +#define UNIT(file) (MINOR(file->f_dentry->d_inode->i_rdev))
/* names of tx level settings */ static char *zt_txlevelnames[] = { @@ -2124,7 +2124,7 @@ static int zt_specchan_open(struct inode *inode, struct file *file, int unit, int inc) { int res = 0; - + printk( "Doint specchan_open unit: %i \n", unit); if (chans[unit] && chans[unit]->sig) { /* Make sure we're not already open, a net device, or a slave device */ if (chans[unit]->flags & ZT_FLAG_OPEN) @@ -2212,7 +2212,7 @@
static int zt_open(struct inode *inode, struct file *file) { - int unit = UNIT(file); + int unit = MINOR(inode->i_rdev); struct zt_chan *chan; /* Minor 0: Special "control" descriptor */ if (!unit) @@ -2511,7 +2511,7 @@
static int zt_release(struct inode *inode, struct file *file) { - int unit = UNIT(file); + int unit = MINOR(inode->i_rdev); int res; struct zt_chan *chan;
@@ -4154,7 +4154,7 @@
static int zt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long data) { - int unit = UNIT(file); + int unit = MINOR(inode->i_rdev); struct zt_chan *chan; struct zt_timer *timer;
_______________________________________________ Asterisk-Dev mailing list [EMAIL PROTECTED] http://lists.digium.com/mailman/listinfo/asterisk-dev To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
_______________________________________________ Asterisk-Dev mailing list [EMAIL PROTECTED] http://lists.digium.com/mailman/listinfo/asterisk-dev To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
