diff options
| -rw-r--r-- | Documentation/filesystems/Locking | 3 | ||||
| -rw-r--r-- | Documentation/filesystems/porting | 12 | ||||
| -rw-r--r-- | Documentation/filesystems/vfs.txt | 17 | ||||
| -rw-r--r-- | fs/inode.c | 4 | ||||
| -rw-r--r-- | include/linux/fs.h | 14 |
5 files changed, 9 insertions, 41 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 37c10cba7177..42d4b30b1045 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
| @@ -90,7 +90,6 @@ of the locking scheme for directory operations. | |||
| 90 | prototypes: | 90 | prototypes: |
| 91 | struct inode *(*alloc_inode)(struct super_block *sb); | 91 | struct inode *(*alloc_inode)(struct super_block *sb); |
| 92 | void (*destroy_inode)(struct inode *); | 92 | void (*destroy_inode)(struct inode *); |
| 93 | void (*read_inode) (struct inode *); | ||
| 94 | void (*dirty_inode) (struct inode *); | 93 | void (*dirty_inode) (struct inode *); |
| 95 | int (*write_inode) (struct inode *, int); | 94 | int (*write_inode) (struct inode *, int); |
| 96 | void (*put_inode) (struct inode *); | 95 | void (*put_inode) (struct inode *); |
| @@ -114,7 +113,6 @@ locking rules: | |||
| 114 | BKL s_lock s_umount | 113 | BKL s_lock s_umount |
| 115 | alloc_inode: no no no | 114 | alloc_inode: no no no |
| 116 | destroy_inode: no | 115 | destroy_inode: no |
| 117 | read_inode: no (see below) | ||
| 118 | dirty_inode: no (must not sleep) | 116 | dirty_inode: no (must not sleep) |
| 119 | write_inode: no | 117 | write_inode: no |
| 120 | put_inode: no | 118 | put_inode: no |
| @@ -133,7 +131,6 @@ show_options: no (vfsmount->sem) | |||
| 133 | quota_read: no no no (see below) | 131 | quota_read: no no no (see below) |
| 134 | quota_write: no no no (see below) | 132 | quota_write: no no no (see below) |
| 135 | 133 | ||
| 136 | ->read_inode() is not a method - it's a callback used in iget(). | ||
| 137 | ->remount_fs() will have the s_umount lock if it's already mounted. | 134 | ->remount_fs() will have the s_umount lock if it's already mounted. |
| 138 | When called from get_sb_single, it does NOT have the s_umount lock. | 135 | When called from get_sb_single, it does NOT have the s_umount lock. |
| 139 | ->quota_read() and ->quota_write() functions are both guaranteed to | 136 | ->quota_read() and ->quota_write() functions are both guaranteed to |
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index fbd3815a5f57..92b888d540a6 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
| @@ -34,8 +34,8 @@ FOO_I(inode) (see in-tree filesystems for examples). | |||
| 34 | 34 | ||
| 35 | Make them ->alloc_inode and ->destroy_inode in your super_operations. | 35 | Make them ->alloc_inode and ->destroy_inode in your super_operations. |
| 36 | 36 | ||
| 37 | Keep in mind that now you need explicit initialization of private data - | 37 | Keep in mind that now you need explicit initialization of private data |
| 38 | typically in ->read_inode() and after getting an inode from new_inode(). | 38 | typically between calling iget_locked() and unlocking the inode. |
| 39 | 39 | ||
| 40 | At some point that will become mandatory. | 40 | At some point that will become mandatory. |
| 41 | 41 | ||
| @@ -173,10 +173,10 @@ should be a non-blocking function that initializes those parts of a | |||
| 173 | newly created inode to allow the test function to succeed. 'data' is | 173 | newly created inode to allow the test function to succeed. 'data' is |
| 174 | passed as an opaque value to both test and set functions. | 174 | passed as an opaque value to both test and set functions. |
| 175 | 175 | ||
| 176 | When the inode has been created by iget5_locked(), it will be returned with | 176 | When the inode has been created by iget5_locked(), it will be returned with the |
| 177 | the I_NEW flag set and will still be locked. read_inode has not been | 177 | I_NEW flag set and will still be locked. The filesystem then needs to finalize |
| 178 | called so the file system still has to finalize the initialization. Once | 178 | the initialization. Once the inode is initialized it must be unlocked by |
| 179 | the inode is initialized it must be unlocked by calling unlock_new_inode(). | 179 | calling unlock_new_inode(). |
| 180 | 180 | ||
| 181 | The filesystem is responsible for setting (and possibly testing) i_ino | 181 | The filesystem is responsible for setting (and possibly testing) i_ino |
| 182 | when appropriate. There is also a simpler iget_locked function that | 182 | when appropriate. There is also a simpler iget_locked function that |
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 9d019d35728f..bd55038b56f5 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
| @@ -203,8 +203,6 @@ struct super_operations { | |||
| 203 | struct inode *(*alloc_inode)(struct super_block *sb); | 203 | struct inode *(*alloc_inode)(struct super_block *sb); |
| 204 | void (*destroy_inode)(struct inode *); | 204 | void (*destroy_inode)(struct inode *); |
| 205 | 205 | ||
| 206 | void (*read_inode) (struct inode *); | ||
| 207 | |||
| 208 | void (*dirty_inode) (struct inode *); | 206 | void (*dirty_inode) (struct inode *); |
| 209 | int (*write_inode) (struct inode *, int); | 207 | int (*write_inode) (struct inode *, int); |
| 210 | void (*put_inode) (struct inode *); | 208 | void (*put_inode) (struct inode *); |
| @@ -242,15 +240,6 @@ or bottom half). | |||
| 242 | ->alloc_inode was defined and simply undoes anything done by | 240 | ->alloc_inode was defined and simply undoes anything done by |
| 243 | ->alloc_inode. | 241 | ->alloc_inode. |
| 244 | 242 | ||
| 245 | read_inode: this method is called to read a specific inode from the | ||
| 246 | mounted filesystem. The i_ino member in the struct inode is | ||
| 247 | initialized by the VFS to indicate which inode to read. Other | ||
| 248 | members are filled in by this method. | ||
| 249 | |||
| 250 | You can set this to NULL and use iget5_locked() instead of iget() | ||
| 251 | to read inodes. This is necessary for filesystems for which the | ||
| 252 | inode number is not sufficient to identify an inode. | ||
| 253 | |||
| 254 | dirty_inode: this method is called by the VFS to mark an inode dirty. | 243 | dirty_inode: this method is called by the VFS to mark an inode dirty. |
| 255 | 244 | ||
| 256 | write_inode: this method is called when the VFS needs to write an | 245 | write_inode: this method is called when the VFS needs to write an |
| @@ -308,9 +297,9 @@ or bottom half). | |||
| 308 | 297 | ||
| 309 | quota_write: called by the VFS to write to filesystem quota file. | 298 | quota_write: called by the VFS to write to filesystem quota file. |
| 310 | 299 | ||
| 311 | The read_inode() method is responsible for filling in the "i_op" | 300 | Whoever sets up the inode is responsible for filling in the "i_op" field. This |
| 312 | field. This is a pointer to a "struct inode_operations" which | 301 | is a pointer to a "struct inode_operations" which describes the methods that |
| 313 | describes the methods that can be performed on individual inodes. | 302 | can be performed on individual inodes. |
| 314 | 303 | ||
| 315 | 304 | ||
| 316 | The Inode Object | 305 | The Inode Object |
diff --git a/fs/inode.c b/fs/inode.c index 276ffd6b6fdd..53245ffcf93d 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
| @@ -928,8 +928,6 @@ EXPORT_SYMBOL(ilookup); | |||
| 928 | * @set: callback used to initialize a new struct inode | 928 | * @set: callback used to initialize a new struct inode |
| 929 | * @data: opaque data pointer to pass to @test and @set | 929 | * @data: opaque data pointer to pass to @test and @set |
| 930 | * | 930 | * |
| 931 | * This is iget() without the read_inode() portion of get_new_inode(). | ||
| 932 | * | ||
| 933 | * iget5_locked() uses ifind() to search for the inode specified by @hashval | 931 | * iget5_locked() uses ifind() to search for the inode specified by @hashval |
| 934 | * and @data in the inode cache and if present it is returned with an increased | 932 | * and @data in the inode cache and if present it is returned with an increased |
| 935 | * reference count. This is a generalized version of iget_locked() for file | 933 | * reference count. This is a generalized version of iget_locked() for file |
| @@ -966,8 +964,6 @@ EXPORT_SYMBOL(iget5_locked); | |||
| 966 | * @sb: super block of file system | 964 | * @sb: super block of file system |
| 967 | * @ino: inode number to get | 965 | * @ino: inode number to get |
| 968 | * | 966 | * |
| 969 | * This is iget() without the read_inode() portion of get_new_inode_fast(). | ||
| 970 | * | ||
| 971 | * iget_locked() uses ifind_fast() to search for the inode specified by @ino in | 967 | * iget_locked() uses ifind_fast() to search for the inode specified by @ino in |
| 972 | * the inode cache and if present it is returned with an increased reference | 968 | * the inode cache and if present it is returned with an increased reference |
| 973 | * count. This is for file systems where the inode number is sufficient for | 969 | * count. This is for file systems where the inode number is sufficient for |
diff --git a/include/linux/fs.h b/include/linux/fs.h index d202600d36bd..36b7abefacbe 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -1241,8 +1241,6 @@ struct super_operations { | |||
| 1241 | struct inode *(*alloc_inode)(struct super_block *sb); | 1241 | struct inode *(*alloc_inode)(struct super_block *sb); |
| 1242 | void (*destroy_inode)(struct inode *); | 1242 | void (*destroy_inode)(struct inode *); |
| 1243 | 1243 | ||
| 1244 | void (*read_inode) (struct inode *); | ||
| 1245 | |||
| 1246 | void (*dirty_inode) (struct inode *); | 1244 | void (*dirty_inode) (struct inode *); |
| 1247 | int (*write_inode) (struct inode *, int); | 1245 | int (*write_inode) (struct inode *, int); |
| 1248 | void (*put_inode) (struct inode *); | 1246 | void (*put_inode) (struct inode *); |
| @@ -1767,18 +1765,6 @@ extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*te | |||
| 1767 | extern struct inode * iget_locked(struct super_block *, unsigned long); | 1765 | extern struct inode * iget_locked(struct super_block *, unsigned long); |
| 1768 | extern void unlock_new_inode(struct inode *); | 1766 | extern void unlock_new_inode(struct inode *); |
| 1769 | 1767 | ||
| 1770 | static inline struct inode *iget(struct super_block *sb, unsigned long ino) | ||
| 1771 | { | ||
| 1772 | struct inode *inode = iget_locked(sb, ino); | ||
| 1773 | |||
| 1774 | if (inode && (inode->i_state & I_NEW)) { | ||
| 1775 | sb->s_op->read_inode(inode); | ||
| 1776 | unlock_new_inode(inode); | ||
| 1777 | } | ||
| 1778 | |||
| 1779 | return inode; | ||
| 1780 | } | ||
| 1781 | |||
| 1782 | extern void __iget(struct inode * inode); | 1768 | extern void __iget(struct inode * inode); |
| 1783 | extern void iget_failed(struct inode *); | 1769 | extern void iget_failed(struct inode *); |
| 1784 | extern void clear_inode(struct inode *); | 1770 | extern void clear_inode(struct inode *); |
