diff options
Diffstat (limited to 'Documentation/filesystems/porting')
| -rw-r--r-- | Documentation/filesystems/porting | 27 | 
1 files changed, 24 insertions, 3 deletions
| diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index 6e29954851a..7f8861d341e 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting @@ -400,10 +400,31 @@ a file off.  --  [mandatory] - --- -[mandatory]  	->get_sb() is gone.  Switch to use of ->mount().  Typically it's just  a matter of switching from calling get_sb_... to mount_... and changing the  function type.  If you were doing it manually, just switch from setting ->mnt_root  to some pointer to returning that pointer.  On errors return ERR_PTR(...). + +-- +[mandatory] +	->permission(), generic_permission() and ->check_acl() have lost flags +argument; instead of passing IPERM_FLAG_RCU we add MAY_NOT_BLOCK into mask. +	generic_permission() has also lost the check_acl argument; if you want +non-NULL to be used for that inode, put it into ->i_op->check_acl. + +-- +[mandatory] +	If you implement your own ->llseek() you must handle SEEK_HOLE and +SEEK_DATA.  You can hanle this by returning -EINVAL, but it would be nicer to +support it in some way.  The generic handler assumes that the entire file is +data and there is a virtual hole at the end of the file.  So if the provided +offset is less than i_size and SEEK_DATA is specified, return the same offset. +If the above is true for the offset and you are given SEEK_HOLE, return the end +of the file.  If the offset is i_size or greater return -ENXIO in either case. + +[mandatory] +	If you have your own ->fsync() you must make sure to call +filemap_write_and_wait_range() so that all dirty pages are synced out properly. +You must also keep in mind that ->fsync() is not called with i_mutex held +anymore, so if you require i_mutex locking you must make sure to take it and +release it yourself. | 
