This file documents the changes in struct file_operations throughout the 2.1
kernel series.

Kernels 2.0.x:

struct file_operations {
        int (*lseek) (struct inode *, struct file *, off_t, int);
        int (*read) (struct inode *, struct file *, char *, int);
        int (*write) (struct inode *, struct file *, const char *, int);
        int (*readdir) (struct inode *, struct file *, void *, filldir_t);
        int (*select) (struct inode *, struct file *, int, select_table *);
        int (*ioctl) (struct inode *, struct file *, unsigned int, 
                      unsigned long);
        int (*mmap) (struct inode *, struct file *, struct vm_area_struct *);
        int (*open) (struct inode *, struct file *);
        void (*release) (struct inode *, struct file *);
        int (*fsync) (struct inode *, struct file *);
        int (*fasync) (struct inode *, struct file *, int);
        int (*check_media_change) (kdev_t dev);
        int (*revalidate) (kdev_t dev);
};


Kernel 2.1.0:

-       int (*lseek) (struct inode *, struct file *, off_t, int);
+       long long (*llseek) (struct inode *, struct file *, long long, int);
-       int (*read) (struct inode *, struct file *, char *, int);
+       long (*read) (struct inode *, struct file *, char *, unsigned long);
-       int (*write) (struct inode *, struct file *, const char *, int);
+       long (*write) (struct inode *, struct file *, const char *, unsigned lon


Kernel 2.1.23:

-       int (*select) (struct inode *, struct file *, int, select_table *);
+       unsigned int (*poll) (struct file *, poll_table *);
[The lock field is added behind the revalidate field]
+       int (*lock) (struct inode *, struct file *, int, struct file_lock *);


Kernel 2.1.31:

-       void (*release) (struct inode *, struct file *);
+       int (*release) (struct inode *, struct file *);


Kernel 2.1.55:

-       int (*readdir) (struct inode *, struct file *, void *, filldir_t);
+       int (*readdir) (struct file *, void *, filldir_t);


Kernel 2.1.56:

-       long long (*llseek) (struct inode *, struct file *, long long, int);
+       long long (*llseek) (struct file *, long long, int);
-       int (*mmap) (struct inode *, struct file *, struct vm_area_struct *);
+       int (*mmap) (struct file *, struct vm_area_struct *);
-       int (*fsync) (struct inode *, struct file *);
+       int (*fsync) (struct file *, struct dentry *);
-       int (*fasync) (struct inode *, struct file *, int);
+       int (*fasync) (struct file *, int);
-       int (*lock) (struct inode *, struct file *, int, struct file_lock *);
+       int (*lock) (struct file *, int, struct file_lock *);


Kernel 2.1.70:

-       long long (*llseek) (struct file *, long long, int);
+       loff_t (*llseek) (struct file *, loff_t, int);
-       long (*read) (struct inode *, struct file *, char *, unsigned long);
+       ssize_t (*read) (struct file *, char *, size_t, loff_t *);
-       long (*write) (struct inode *, struct file *, const char *, 
                       unsigned long);
+       ssize_t (*write) (struct file *, const char *, size_t, loff_t *);


Kernel 2.1.72:

-       unsigned int (*poll) (struct file *, poll_table *);
+       unsigned int (*poll) (struct file *, struct poll_table_struct *);


Kernel 2.1.118:

[The flush field is added behind the open field -- stupid...]
+       int (*flush) (struct file *);


Last kernel checked: 2.2.0-pre4.
