ppc64 mf_proc file position fix
PATCH 1/1 ppc64 mf_proc file position fix
Andrew,
arch/ppc64/kernel/mf_proc.c uses a bad interface for moving along file position in a proc_write routine. This quit working altogether in 2.6.8. Patch to fix. And I did a quick scan of the kernel to see if anyone else was similarly broken...apparantly not :-)
Fixes a broken update of f_pos in a proc file write routine.
Signed off by: Dave Boutcher <[email protected]>
arch/ppc64/kernel/mf_proc.c renamed from arch/ppc64/kernel/mf_proc.c.orig +12 -18
@@ -168,22 +168,29 @@return count; } -static int proc_mf_change_vmlinux (struct file *file,const char *buffer, -unsigned long count,void *data) +static ssize_t proc_mf_change_vmlinux (struct file *file, +const char __user *buf, +size_t count,loff_t *ppos) { +struct inode * inode = file->f_dentry->d_inode; +struct proc_dir_entry * dp =PDE (inode);int rc;if (!capable (CAP_SYS_ADMIN ))return -EACCES ; - rc =mf_setVmlinuxChunk (buffer, count, file->f_pos, (u64 )data); + rc =mf_setVmlinuxChunk (buf, count, *ppos, (u64 )dp->data);if (rc <0 )return rc; - file->f_pos += count; + *ppos += count;return count; } +static struct file_operations proc_vmlinux_operations = { + .write = proc_mf_change_vmlinux, +}; +static int __init mf_proc_init (void ) {struct proc_dir_entry *mf_proc_root;
@@ -219,20 +226,7 @@return 1 ; ent->nlink =1 ; ent->data = (void *)(long )i; -#if 0 -if (i ==3 ) { -/* -* if we had a 'D' vmlinux entry, it would only -* be readable. -*/ - ent->read_proc = proc_mf_dump_vmlinux; - ent->write_proc =NULL ; - } else -#endif - { - ent->write_proc = proc_mf_change_vmlinux; - ent->read_proc =NULL ; - } + ent->proc_fops = &proc_vmlinux_operations; } ent =create_proc_entry ("side" ,S_IFREG |S_IRUSR |S_IWUSR , mf_proc_root);
Signature · 1 line
Dave Boutcher
Quoted 8 lines · Dave C Boutcher
Andrew,
arch/ppc64/kernel/mf_proc.cuses a bad interface for moving along file position in aproc_writeroutine. This quit working altogether in 2.6.8. Patch to fix. And I did a quick scan of the kernel to see if anyone else was similarly broken...apparantly not :-)Fixes a broken update of
f_posin a proc file write routine.
What about moving on to seq_file while you're at it? Switching from one deprecated interface to another doesn't really sound like a worthwile effort.
Quoted 8 lines · Christoph Hellwig
Quoted 7 lines · Dave C Boutcher
Andrew,
arch/ppc64/kernel/mf_proc.cuses a bad interface for moving along file position in aproc_writeroutine. This quit working altogether in 2.6.8. Patch to fix. And I did a quick scan of the kernel to see if anyone else was similarly broken...apparantly not :-)
Quoted 5 lines
Quoted 1 line
Fixes a broken update of
f_posin a proc file write routine.What about moving on to
seq_filewhile you're at it? Switching from one deprecated interface to another doesn't really sound like a worthwile effort.
The specific problem was on the write side, not the read side, so AFAIK, seq_file wasn't going to help out. I started re-writing the whole file to use seq_file for all the read stuff, and after a few hours into it I decided to just fix the broken bit rather than gratuitously rewriting the whole thing.
Signature · 1 line
Dave Boutcher