From: Arjan van de Ven Mark the f_ops members of inodes as const, as well as fix the ripple-through this causes by places that copy this f_ops and then "do stuff" with it. Signed-off-by: Arjan van de Ven Signed-off-by: Andrew Morton --- drivers/char/drm/drm_fops.c | 2 +- drivers/char/drm/i810_dma.c | 2 +- drivers/char/drm/i830_dma.c | 2 +- drivers/char/mem.c | 2 +- drivers/char/misc.c | 2 +- drivers/input/input.c | 2 +- drivers/isdn/capi/kcapi_proc.c | 2 +- drivers/media/dvb/dvb-core/dvbdev.c | 2 +- drivers/media/video/videodev.c | 2 +- drivers/message/i2o/i2o_proc.c | 2 +- drivers/oprofile/oprofilefs.c | 6 +++--- drivers/telephony/phonedev.c | 2 +- drivers/usb/core/file.c | 6 +++--- fs/char_dev.c | 4 ++-- fs/debugfs/inode.c | 2 +- fs/inode.c | 2 +- fs/nfsd/vfs.c | 2 +- fs/proc/generic.c | 2 +- fs/proc/internal.h | 2 +- fs/proc/proc_misc.c | 2 +- fs/select.c | 2 +- include/linux/cdev.h | 4 ++-- include/linux/debugfs.h | 2 +- include/linux/fs.h | 6 +++--- include/linux/input.h | 2 +- include/linux/miscdevice.h | 2 +- include/linux/oprofile.h | 4 ++-- include/linux/proc_fs.h | 4 ++-- include/linux/sound.h | 12 ++++++------ include/linux/sunrpc/stats.h | 4 ++-- include/linux/usb.h | 2 +- include/linux/videodev2.h | 2 +- include/sound/core.h | 6 +++--- net/sunrpc/rpc_pipe.c | 2 +- net/sunrpc/stats.c | 4 ++-- sound/core/init.c | 3 ++- sound/core/sound.c | 4 ++-- sound/core/sound_oss.c | 2 +- sound/sound_core.c | 22 +++++++++++----------- 39 files changed, 70 insertions(+), 69 deletions(-) diff -puN drivers/char/drm/drm_fops.c~mark-f_ops-const-in-the-inode drivers/char/drm/drm_fops.c --- 25/drivers/char/drm/drm_fops.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/char/drm/drm_fops.c Fri Jan 13 17:54:43 2006 @@ -175,7 +175,7 @@ int drm_stub_open(struct inode *inode, s drm_device_t *dev = NULL; int minor = iminor(inode); int err = -ENODEV; - struct file_operations *old_fops; + const struct file_operations *old_fops; DRM_DEBUG("\n"); diff -puN drivers/char/drm/i810_dma.c~mark-f_ops-const-in-the-inode drivers/char/drm/i810_dma.c --- 25/drivers/char/drm/i810_dma.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/char/drm/i810_dma.c Fri Jan 13 17:54:43 2006 @@ -126,7 +126,7 @@ static int i810_map_buffer(drm_buf_t * b drm_device_t *dev = priv->head->dev; drm_i810_buf_priv_t *buf_priv = buf->dev_private; drm_i810_private_t *dev_priv = dev->dev_private; - struct file_operations *old_fops; + const struct file_operations *old_fops; int retcode = 0; if (buf_priv->currently_mapped == I810_BUF_MAPPED) diff -puN drivers/char/drm/i830_dma.c~mark-f_ops-const-in-the-inode drivers/char/drm/i830_dma.c --- 25/drivers/char/drm/i830_dma.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/char/drm/i830_dma.c Fri Jan 13 17:54:43 2006 @@ -128,7 +128,7 @@ static int i830_map_buffer(drm_buf_t * b drm_device_t *dev = priv->head->dev; drm_i830_buf_priv_t *buf_priv = buf->dev_private; drm_i830_private_t *dev_priv = dev->dev_private; - struct file_operations *old_fops; + const struct file_operations *old_fops; unsigned long virtual; int retcode = 0; diff -puN drivers/char/mem.c~mark-f_ops-const-in-the-inode drivers/char/mem.c --- 25/drivers/char/mem.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/char/mem.c Fri Jan 13 17:54:43 2006 @@ -907,7 +907,7 @@ static const struct { unsigned int minor; char *name; umode_t mode; - struct file_operations *fops; + const struct file_operations *fops; } devlist[] = { /* list of minor devices */ {1, "mem", S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops}, {2, "kmem", S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops}, diff -puN drivers/char/misc.c~mark-f_ops-const-in-the-inode drivers/char/misc.c --- 25/drivers/char/misc.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/char/misc.c Fri Jan 13 17:54:43 2006 @@ -129,7 +129,7 @@ static int misc_open(struct inode * inod int minor = iminor(inode); struct miscdevice *c; int err = -ENODEV; - struct file_operations *old_fops, *new_fops = NULL; + const struct file_operations *old_fops, *new_fops = NULL; down(&misc_sem); diff -puN drivers/input/input.c~mark-f_ops-const-in-the-inode drivers/input/input.c --- 25/drivers/input/input.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/input/input.c Fri Jan 13 17:54:43 2006 @@ -924,7 +924,7 @@ void input_unregister_handler(struct inp static int input_open_file(struct inode *inode, struct file *file) { struct input_handler *handler = input_table[iminor(inode) >> 5]; - struct file_operations *old_fops, *new_fops = NULL; + const struct file_operations *old_fops, *new_fops = NULL; int err; /* No load-on-demand here? */ diff -puN drivers/isdn/capi/kcapi_proc.c~mark-f_ops-const-in-the-inode drivers/isdn/capi/kcapi_proc.c --- 25/drivers/isdn/capi/kcapi_proc.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/isdn/capi/kcapi_proc.c Fri Jan 13 17:54:43 2006 @@ -233,7 +233,7 @@ static struct file_operations proc_appls }; static void -create_seq_entry(char *name, mode_t mode, struct file_operations *f) +create_seq_entry(char *name, mode_t mode, const struct file_operations *f) { struct proc_dir_entry *entry; entry = create_proc_entry(name, mode, NULL); diff -puN drivers/media/dvb/dvb-core/dvbdev.c~mark-f_ops-const-in-the-inode drivers/media/dvb/dvb-core/dvbdev.c --- 25/drivers/media/dvb/dvb-core/dvbdev.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/media/dvb/dvb-core/dvbdev.c Fri Jan 13 17:54:43 2006 @@ -87,7 +87,7 @@ static int dvb_device_open(struct inode if (dvbdev && dvbdev->fops) { int err = 0; - struct file_operations *old_fops; + const struct file_operations *old_fops; file->private_data = dvbdev; old_fops = file->f_op; diff -puN drivers/media/video/videodev.c~mark-f_ops-const-in-the-inode drivers/media/video/videodev.c --- 25/drivers/media/video/videodev.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/media/video/videodev.c Fri Jan 13 17:54:43 2006 @@ -98,7 +98,7 @@ static int video_open(struct inode *inod unsigned int minor = iminor(inode); int err = 0; struct video_device *vfl; - struct file_operations *old_fops; + const struct file_operations *old_fops; if(minor>=VIDEO_NUM_DEVICES) return -ENODEV; diff -puN drivers/message/i2o/i2o_proc.c~mark-f_ops-const-in-the-inode drivers/message/i2o/i2o_proc.c --- 25/drivers/message/i2o/i2o_proc.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/message/i2o/i2o_proc.c Fri Jan 13 17:54:43 2006 @@ -56,7 +56,7 @@ typedef struct _i2o_proc_entry_t { char *name; /* entry name */ mode_t mode; /* mode */ - struct file_operations *fops; /* open function */ + const struct file_operations *fops; /* open function */ } i2o_proc_entry; /* global I2O /proc/i2o entry */ diff -puN drivers/oprofile/oprofilefs.c~mark-f_ops-const-in-the-inode drivers/oprofile/oprofilefs.c --- 25/drivers/oprofile/oprofilefs.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/oprofile/oprofilefs.c Fri Jan 13 17:54:43 2006 @@ -130,7 +130,7 @@ static struct file_operations ulong_ro_f static struct dentry * __oprofilefs_create_file(struct super_block * sb, - struct dentry * root, char const * name, struct file_operations * fops, + struct dentry * root, char const * name, const struct file_operations * fops, int perm) { struct dentry * dentry; @@ -203,7 +203,7 @@ int oprofilefs_create_ro_atomic(struct s int oprofilefs_create_file(struct super_block * sb, struct dentry * root, - char const * name, struct file_operations * fops) + char const * name, const struct file_operations * fops) { if (!__oprofilefs_create_file(sb, root, name, fops, 0644)) return -EFAULT; @@ -212,7 +212,7 @@ int oprofilefs_create_file(struct super_ int oprofilefs_create_file_perm(struct super_block * sb, struct dentry * root, - char const * name, struct file_operations * fops, int perm) + char const * name, const struct file_operations * fops, int perm) { if (!__oprofilefs_create_file(sb, root, name, fops, perm)) return -EFAULT; diff -puN drivers/telephony/phonedev.c~mark-f_ops-const-in-the-inode drivers/telephony/phonedev.c --- 25/drivers/telephony/phonedev.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/telephony/phonedev.c Fri Jan 13 17:54:43 2006 @@ -49,7 +49,7 @@ static int phone_open(struct inode *inod unsigned int minor = iminor(inode); int err = 0; struct phone_device *p; - struct file_operations *old_fops, *new_fops = NULL; + const struct file_operations *old_fops, *new_fops = NULL; if (minor >= PHONE_NUM_DEVICES) return -ENODEV; diff -puN drivers/usb/core/file.c~mark-f_ops-const-in-the-inode drivers/usb/core/file.c --- 25/drivers/usb/core/file.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/drivers/usb/core/file.c Fri Jan 13 17:54:43 2006 @@ -24,15 +24,15 @@ #include "usb.h" #define MAX_USB_MINORS 256 -static struct file_operations *usb_minors[MAX_USB_MINORS]; +static const struct file_operations *usb_minors[MAX_USB_MINORS]; static DEFINE_SPINLOCK(minor_lock); static int usb_open(struct inode * inode, struct file * file) { int minor = iminor(inode); - struct file_operations *c; + const struct file_operations *c; int err = -ENODEV; - struct file_operations *old_fops, *new_fops = NULL; + const struct file_operations *old_fops, *new_fops = NULL; spin_lock (&minor_lock); c = usb_minors[minor]; diff -puN fs/char_dev.c~mark-f_ops-const-in-the-inode fs/char_dev.c --- 25/fs/char_dev.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/char_dev.c Fri Jan 13 17:54:43 2006 @@ -252,7 +252,7 @@ int alloc_chrdev_region(dev_t *dev, unsi } int register_chrdev(unsigned int major, const char *name, - struct file_operations *fops) + const struct file_operations *fops) { struct char_device_struct *cd; struct cdev *cdev; @@ -476,7 +476,7 @@ struct cdev *cdev_alloc(void) return p; } -void cdev_init(struct cdev *cdev, struct file_operations *fops) +void cdev_init(struct cdev *cdev, const struct file_operations *fops) { memset(cdev, 0, sizeof *cdev); INIT_LIST_HEAD(&cdev->list); diff -puN fs/debugfs/inode.c~mark-f_ops-const-in-the-inode fs/debugfs/inode.c --- 25/fs/debugfs/inode.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/debugfs/inode.c Fri Jan 13 17:54:43 2006 @@ -191,7 +191,7 @@ static int debugfs_create_by_name(const */ struct dentry *debugfs_create_file(const char *name, mode_t mode, struct dentry *parent, void *data, - struct file_operations *fops) + const struct file_operations *fops) { struct dentry *dentry = NULL; int error; diff -puN fs/inode.c~mark-f_ops-const-in-the-inode fs/inode.c --- 25/fs/inode.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/inode.c Fri Jan 13 17:54:43 2006 @@ -104,7 +104,7 @@ static struct inode *alloc_inode(struct { static struct address_space_operations empty_aops; static struct inode_operations empty_iops; - static struct file_operations empty_fops; + static const struct file_operations empty_fops; struct inode *inode; if (sb->s_op->alloc_inode) diff -puN fs/nfsd/vfs.c~mark-f_ops-const-in-the-inode fs/nfsd/vfs.c --- 25/fs/nfsd/vfs.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/nfsd/vfs.c Fri Jan 13 17:54:43 2006 @@ -706,7 +706,7 @@ nfsd_close(struct file *filp) * after it. */ static inline int nfsd_dosync(struct file *filp, struct dentry *dp, - struct file_operations *fop) + const struct file_operations *fop) { struct inode *inode = dp->d_inode; int (*fsync) (struct file *, struct dentry *, int); diff -puN fs/proc/generic.c~mark-f_ops-const-in-the-inode fs/proc/generic.c --- 25/fs/proc/generic.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/proc/generic.c Fri Jan 13 17:54:43 2006 @@ -560,7 +560,7 @@ static void proc_kill_inodes(struct proc struct file * filp = list_entry(p, struct file, f_u.fu_list); struct dentry * dentry = filp->f_dentry; struct inode * inode; - struct file_operations *fops; + const struct file_operations *fops; if (dentry->d_op != &proc_dentry_operations) continue; diff -puN fs/proc/internal.h~mark-f_ops-const-in-the-inode fs/proc/internal.h --- 25/fs/proc/internal.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/proc/internal.h Fri Jan 13 17:54:43 2006 @@ -30,7 +30,7 @@ do { \ #endif -extern void create_seq_entry(char *name, mode_t mode, struct file_operations *f); +extern void create_seq_entry(char *name, mode_t mode, const struct file_operations *f); extern int proc_exe_link(struct inode *, struct dentry **, struct vfsmount **); extern int proc_tid_stat(struct task_struct *, char *); extern int proc_tgid_stat(struct task_struct *, char *); diff -puN fs/proc/proc_misc.c~mark-f_ops-const-in-the-inode fs/proc/proc_misc.c --- 25/fs/proc/proc_misc.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/proc/proc_misc.c Fri Jan 13 17:54:43 2006 @@ -697,7 +697,7 @@ static struct file_operations proc_sysrq struct proc_dir_entry *proc_root_kcore; -void create_seq_entry(char *name, mode_t mode, struct file_operations *f) +void create_seq_entry(char *name, mode_t mode, const struct file_operations *f) { struct proc_dir_entry *entry; entry = create_proc_entry(name, mode, NULL); diff -puN fs/select.c~mark-f_ops-const-in-the-inode fs/select.c --- 25/fs/select.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/fs/select.c Fri Jan 13 17:54:43 2006 @@ -220,7 +220,7 @@ int do_select(int n, fd_set_bits *fds, s for (i = 0; i < n; ++rinp, ++routp, ++rexp) { unsigned long in, out, ex, all_bits, bit = 1, mask, j; unsigned long res_in = 0, res_out = 0, res_ex = 0; - struct file_operations *f_op = NULL; + const struct file_operations *f_op = NULL; struct file *file = NULL; in = *inp++; out = *outp++; ex = *exp++; diff -puN include/linux/cdev.h~mark-f_ops-const-in-the-inode include/linux/cdev.h --- 25/include/linux/cdev.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/cdev.h Fri Jan 13 17:54:43 2006 @@ -5,13 +5,13 @@ struct cdev { struct kobject kobj; struct module *owner; - struct file_operations *ops; + const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count; }; -void cdev_init(struct cdev *, struct file_operations *); +void cdev_init(struct cdev *, const struct file_operations *); struct cdev *cdev_alloc(void); diff -puN include/linux/debugfs.h~mark-f_ops-const-in-the-inode include/linux/debugfs.h --- 25/include/linux/debugfs.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/debugfs.h Fri Jan 13 17:54:43 2006 @@ -24,7 +24,7 @@ struct file_operations; #if defined(CONFIG_DEBUG_FS) struct dentry *debugfs_create_file(const char *name, mode_t mode, struct dentry *parent, void *data, - struct file_operations *fops); + const struct file_operations *fops); struct dentry *debugfs_create_dir(const char *name, struct dentry *parent); diff -puN include/linux/fs.h~mark-f_ops-const-in-the-inode include/linux/fs.h --- 25/include/linux/fs.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/fs.h Fri Jan 13 17:54:43 2006 @@ -486,7 +486,7 @@ struct inode { struct mutex i_mutex; struct rw_semaphore i_alloc_sem; struct inode_operations *i_op; - struct file_operations *i_fop; /* former ->i_op->default_file_ops */ + const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ struct super_block *i_sb; struct file_lock *i_flock; struct address_space *i_mapping; @@ -626,7 +626,7 @@ struct file { } f_u; struct dentry *f_dentry; struct vfsmount *f_vfsmnt; - struct file_operations *f_op; + const struct file_operations *f_op; atomic_t f_count; unsigned int f_flags; mode_t f_mode; @@ -1390,7 +1390,7 @@ extern void bd_release(struct block_devi extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); extern int register_chrdev_region(dev_t, unsigned, const char *); extern int register_chrdev(unsigned int, const char *, - struct file_operations *); + const struct file_operations *); extern int unregister_chrdev(unsigned int, const char *); extern void unregister_chrdev_region(dev_t, unsigned); extern int chrdev_open(struct inode *, struct file *); diff -puN include/linux/input.h~mark-f_ops-const-in-the-inode include/linux/input.h --- 25/include/linux/input.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/input.h Fri Jan 13 17:54:43 2006 @@ -957,7 +957,7 @@ struct input_handler { struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id); void (*disconnect)(struct input_handle *handle); - struct file_operations *fops; + const struct file_operations *fops; int minor; char *name; diff -puN include/linux/miscdevice.h~mark-f_ops-const-in-the-inode include/linux/miscdevice.h --- 25/include/linux/miscdevice.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/miscdevice.h Fri Jan 13 17:54:43 2006 @@ -36,7 +36,7 @@ struct class_device; struct miscdevice { int minor; const char *name; - struct file_operations *fops; + const struct file_operations *fops; struct list_head list; struct device *dev; struct class_device *class; diff -puN include/linux/oprofile.h~mark-f_ops-const-in-the-inode include/linux/oprofile.h --- 25/include/linux/oprofile.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/oprofile.h Fri Jan 13 17:54:43 2006 @@ -74,10 +74,10 @@ void oprofile_add_trace(unsigned long ei * the specified file operations. */ int oprofilefs_create_file(struct super_block * sb, struct dentry * root, - char const * name, struct file_operations * fops); + char const * name, const struct file_operations * fops); int oprofilefs_create_file_perm(struct super_block * sb, struct dentry * root, - char const * name, struct file_operations * fops, int perm); + char const * name, const struct file_operations * fops, int perm); /** Create a file for read/write access to an unsigned long. */ int oprofilefs_create_ulong(struct super_block * sb, struct dentry * root, diff -puN include/linux/proc_fs.h~mark-f_ops-const-in-the-inode include/linux/proc_fs.h --- 25/include/linux/proc_fs.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/proc_fs.h Fri Jan 13 17:54:43 2006 @@ -58,7 +58,7 @@ struct proc_dir_entry { gid_t gid; unsigned long size; struct inode_operations * proc_iops; - struct file_operations * proc_fops; + const struct file_operations * proc_fops; get_info_t *get_info; struct module *owner; struct proc_dir_entry *next, *parent, *subdir; @@ -184,7 +184,7 @@ static inline struct proc_dir_entry *pro } static inline struct proc_dir_entry *proc_net_fops_create(const char *name, - mode_t mode, struct file_operations *fops) + mode_t mode, const struct file_operations *fops) { struct proc_dir_entry *res = create_proc_entry(name, mode, proc_net); if (res) diff -puN include/linux/sound.h~mark-f_ops-const-in-the-inode include/linux/sound.h --- 25/include/linux/sound.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/sound.h Fri Jan 13 17:54:43 2006 @@ -30,12 +30,12 @@ */ struct device; -extern int register_sound_special(struct file_operations *fops, int unit); -extern int register_sound_special_device(struct file_operations *fops, int unit, struct device *dev); -extern int register_sound_mixer(struct file_operations *fops, int dev); -extern int register_sound_midi(struct file_operations *fops, int dev); -extern int register_sound_dsp(struct file_operations *fops, int dev); -extern int register_sound_synth(struct file_operations *fops, int dev); +extern int register_sound_special(const struct file_operations *fops, int unit); +extern int register_sound_special_device(const struct file_operations *fops, int unit, struct device *dev); +extern int register_sound_mixer(const struct file_operations *fops, int dev); +extern int register_sound_midi(const struct file_operations *fops, int dev); +extern int register_sound_dsp(const struct file_operations *fops, int dev); +extern int register_sound_synth(const struct file_operations *fops, int dev); extern void unregister_sound_special(int unit); extern void unregister_sound_mixer(int unit); diff -puN include/linux/sunrpc/stats.h~mark-f_ops-const-in-the-inode include/linux/sunrpc/stats.h --- 25/include/linux/sunrpc/stats.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/sunrpc/stats.h Fri Jan 13 17:54:43 2006 @@ -50,7 +50,7 @@ struct proc_dir_entry * rpc_proc_registe void rpc_proc_unregister(const char *); void rpc_proc_zero(struct rpc_program *); struct proc_dir_entry * svc_proc_register(struct svc_stat *, - struct file_operations *); + const struct file_operations *); void svc_proc_unregister(const char *); void svc_seq_show(struct seq_file *, @@ -65,7 +65,7 @@ static inline void rpc_proc_unregister(c static inline void rpc_proc_zero(struct rpc_program *p) {} static inline struct proc_dir_entry *svc_proc_register(struct svc_stat *s, - struct file_operations *f) { return NULL; } + const struct file_operations *f) { return NULL; } static inline void svc_proc_unregister(const char *p) {} static inline void svc_seq_show(struct seq_file *seq, diff -puN include/linux/usb.h~mark-f_ops-const-in-the-inode include/linux/usb.h --- 25/include/linux/usb.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/usb.h Fri Jan 13 17:54:43 2006 @@ -627,7 +627,7 @@ extern struct bus_type usb_bus_type; */ struct usb_class_driver { char *name; - struct file_operations *fops; + const struct file_operations *fops; int minor_base; }; diff -puN include/linux/videodev2.h~mark-f_ops-const-in-the-inode include/linux/videodev2.h --- 25/include/linux/videodev2.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/linux/videodev2.h Fri Jan 13 17:54:43 2006 @@ -65,7 +65,7 @@ struct video_device int minor; /* device ops + callbacks */ - struct file_operations *fops; + const struct file_operations *fops; void (*release)(struct video_device *vfd); diff -puN include/sound/core.h~mark-f_ops-const-in-the-inode include/sound/core.h --- 25/include/sound/core.h~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/include/sound/core.h Fri Jan 13 17:54:43 2006 @@ -186,7 +186,7 @@ struct snd_minor { int type; /* SNDRV_DEVICE_TYPE_XXX */ int card; /* card number */ int device; /* device number */ - struct file_operations *f_ops; /* file operations */ + const struct file_operations *f_ops; /* file operations */ void *private_data; /* private data for f_ops->open */ char name[0]; /* device name (keep at the end of structure) */ @@ -200,14 +200,14 @@ extern int snd_ecards_limit; void snd_request_card(int card); int snd_register_device(int type, struct snd_card *card, int dev, - struct file_operations *f_ops, void *private_data, + const struct file_operations *f_ops, void *private_data, const char *name); int snd_unregister_device(int type, struct snd_card *card, int dev); void *snd_lookup_minor_data(unsigned int minor, int type); #ifdef CONFIG_SND_OSSEMUL int snd_register_oss_device(int type, struct snd_card *card, int dev, - struct file_operations *f_ops, void *private_data, + const struct file_operations *f_ops, void *private_data, const char *name); int snd_unregister_oss_device(int type, struct snd_card *card, int dev); void *snd_lookup_oss_minor_data(unsigned int minor, int type); diff -puN net/sunrpc/rpc_pipe.c~mark-f_ops-const-in-the-inode net/sunrpc/rpc_pipe.c --- 25/net/sunrpc/rpc_pipe.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/net/sunrpc/rpc_pipe.c Fri Jan 13 17:54:43 2006 @@ -374,7 +374,7 @@ enum { */ struct rpc_filelist { char *name; - struct file_operations *i_fop; + const struct file_operations *i_fop; int mode; }; diff -puN net/sunrpc/stats.c~mark-f_ops-const-in-the-inode net/sunrpc/stats.c --- 25/net/sunrpc/stats.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/net/sunrpc/stats.c Fri Jan 13 17:54:43 2006 @@ -110,7 +110,7 @@ void svc_seq_show(struct seq_file *seq, * Register/unregister RPC proc files */ static inline struct proc_dir_entry * -do_register(const char *name, void *data, struct file_operations *fops) +do_register(const char *name, void *data, const struct file_operations *fops) { struct proc_dir_entry *ent; @@ -138,7 +138,7 @@ rpc_proc_unregister(const char *name) } struct proc_dir_entry * -svc_proc_register(struct svc_stat *statp, struct file_operations *fops) +svc_proc_register(struct svc_stat *statp, const struct file_operations *fops) { return do_register(statp->program->pg_name, statp, fops); } diff -puN sound/core/init.c~mark-f_ops-const-in-the-inode sound/core/init.c --- 25/sound/core/init.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/sound/core/init.c Fri Jan 13 17:54:43 2006 @@ -190,7 +190,8 @@ int snd_card_disconnect(struct snd_card struct snd_monitor_file *mfile; struct file *file; struct snd_shutdown_f_ops *s_f_ops; - struct file_operations *f_ops, *old_f_ops; + struct file_operations *f_ops; + const struct file_operations *old_f_ops; int err; spin_lock(&card->files_lock); diff -puN sound/core/sound.c~mark-f_ops-const-in-the-inode sound/core/sound.c --- 25/sound/core/sound.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/sound/core/sound.c Fri Jan 13 17:54:43 2006 @@ -137,7 +137,7 @@ static int snd_open(struct inode *inode, { unsigned int minor = iminor(inode); struct snd_minor *mptr = NULL; - struct file_operations *old_fops; + const struct file_operations *old_fops; int err = 0; if (minor > ARRAY_SIZE(snd_minors)) @@ -240,7 +240,7 @@ static int snd_kernel_minor(int type, st * Retrurns zero if successful, or a negative error code on failure. */ int snd_register_device(int type, struct snd_card *card, int dev, - struct file_operations *f_ops, void *private_data, + const struct file_operations *f_ops, void *private_data, const char *name) { int minor; diff -puN sound/core/sound_oss.c~mark-f_ops-const-in-the-inode sound/core/sound_oss.c --- 25/sound/core/sound_oss.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/sound/core/sound_oss.c Fri Jan 13 17:54:43 2006 @@ -95,7 +95,7 @@ static int snd_oss_kernel_minor(int type } int snd_register_oss_device(int type, struct snd_card *card, int dev, - struct file_operations *f_ops, void *private_data, + const struct file_operations *f_ops, void *private_data, const char *name) { int minor = snd_oss_kernel_minor(type, card, dev); diff -puN sound/sound_core.c~mark-f_ops-const-in-the-inode sound/sound_core.c --- 25/sound/sound_core.c~mark-f_ops-const-in-the-inode Fri Jan 13 17:54:43 2006 +++ 25-akpm/sound/sound_core.c Fri Jan 13 17:54:43 2006 @@ -53,7 +53,7 @@ struct sound_unit { int unit_minor; - struct file_operations *unit_fops; + const struct file_operations *unit_fops; struct sound_unit *next; char name[32]; }; @@ -73,7 +73,7 @@ EXPORT_SYMBOL(sound_class); * join into it. Called with the lock asserted */ -static int __sound_insert_unit(struct sound_unit * s, struct sound_unit **list, struct file_operations *fops, int index, int low, int top) +static int __sound_insert_unit(struct sound_unit * s, struct sound_unit **list, const struct file_operations *fops, int index, int low, int top) { int n=low; @@ -153,7 +153,7 @@ static DEFINE_SPINLOCK(sound_loader_lock * list. Acquires locks as needed */ -static int sound_insert_unit(struct sound_unit **list, struct file_operations *fops, int index, int low, int top, const char *name, umode_t mode, struct device *dev) +static int sound_insert_unit(struct sound_unit **list, const struct file_operations *fops, int index, int low, int top, const char *name, umode_t mode, struct device *dev) { struct sound_unit *s = kmalloc(sizeof(*s), GFP_KERNEL); int r; @@ -237,7 +237,7 @@ static struct sound_unit *chains[SOUND_S * a negative error code is returned. */ -int register_sound_special_device(struct file_operations *fops, int unit, +int register_sound_special_device(const struct file_operations *fops, int unit, struct device *dev) { const int chain = unit % SOUND_STEP; @@ -301,7 +301,7 @@ int register_sound_special_device(struct EXPORT_SYMBOL(register_sound_special_device); -int register_sound_special(struct file_operations *fops, int unit) +int register_sound_special(const struct file_operations *fops, int unit) { return register_sound_special_device(fops, unit, NULL); } @@ -318,7 +318,7 @@ EXPORT_SYMBOL(register_sound_special); * number is returned, on failure a negative error code is returned. */ -int register_sound_mixer(struct file_operations *fops, int dev) +int register_sound_mixer(const struct file_operations *fops, int dev) { return sound_insert_unit(&chains[0], fops, dev, 0, 128, "mixer", S_IRUSR | S_IWUSR, NULL); @@ -336,7 +336,7 @@ EXPORT_SYMBOL(register_sound_mixer); * number is returned, on failure a negative error code is returned. */ -int register_sound_midi(struct file_operations *fops, int dev) +int register_sound_midi(const struct file_operations *fops, int dev) { return sound_insert_unit(&chains[2], fops, dev, 2, 130, "midi", S_IRUSR | S_IWUSR, NULL); @@ -362,7 +362,7 @@ EXPORT_SYMBOL(register_sound_midi); * and will always allocate them as a matching pair - eg dsp3/audio3 */ -int register_sound_dsp(struct file_operations *fops, int dev) +int register_sound_dsp(const struct file_operations *fops, int dev) { return sound_insert_unit(&chains[3], fops, dev, 3, 131, "dsp", S_IWUSR | S_IRUSR, NULL); @@ -381,7 +381,7 @@ EXPORT_SYMBOL(register_sound_dsp); */ -int register_sound_synth(struct file_operations *fops, int dev) +int register_sound_synth(const struct file_operations *fops, int dev) { return sound_insert_unit(&chains[9], fops, dev, 9, 137, "synth", S_IRUSR | S_IWUSR, NULL); @@ -501,7 +501,7 @@ int soundcore_open(struct inode *inode, int chain; int unit = iminor(inode); struct sound_unit *s; - struct file_operations *new_fops = NULL; + const struct file_operations *new_fops = NULL; chain=unit&0x0F; if(chain==4 || chain==5) /* dsp/audio/dsp16 */ @@ -540,7 +540,7 @@ int soundcore_open(struct inode *inode, * switching ->f_op in the first place. */ int err = 0; - struct file_operations *old_fops = file->f_op; + const struct file_operations *old_fops = file->f_op; file->f_op = new_fops; spin_unlock(&sound_loader_lock); if(file->f_op->open) _