Summary:

        1) s_op->notify_change() - went into inode_operations (called
->setattr(), otherwise the same).
        2) i_op->default_file_ops - gone. Instead just set ->i_fop at the
same time when you set ->i_op.
        3) init_special_inode() doesn't change ->i_op, only ->i_fop.
        4) in proc_dir_entry ->ops is split into ->proc_iops and ->proc_fops.

Rationale:

        Having default_file_ops and revalidate() in the same structure
(inode_operations) is a big no-no. Reason: for devices and FIFOs we
want to set the former to standard (fs-independent) methods. However,
filesystem might have really good reasons to have ->revalidate() for
FIFOs - e.g. NFS can't pretend that fhandles of named pipes never become
stale. So we want NFS setting _some_ inode methods and in the same time
we want uniform file methods from fs/fifo.c. Solution: take the pointer
to file_operations out of inode_operations. The rest of the changes follows
from that - we need a pointer in inode to store the former
->i_op->default_file_ops and we need two pointers in proc_dir_entry to keep
parts of old ->ops. Moving ->notify_change() to inode_operations was pretty
obvious thing - we had to keep that in super_operations, but we don't have
to do it anymore.

Impact on filesystems: obvious. Take ->default_file_ops out of the method
tables and add initialization in places where you set ->i_op. Noticing
that fix is needed is trivial since it's 'it stopped to compile' kind of
change.

Reply via email to