diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2013-09-16 08:51:55 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-09-16 19:17:24 -0400 |
commit | 0854d450e229e37102a76e3ccf065d8e8137846f (patch) | |
tree | 22fa987c0c2d6f8fbf1e89504ab044a7bab7d7ed /Documentation | |
parent | 606035e76e79b14bf7a7c219140c045a952cc76e (diff) |
vfs: improve i_op->atomic_open() documentation
Fix documentation of ->atomic_open() and related functions: finish_open()
and finish_no_open(). Also add details that seem to be unclear and a
source of bugs (some of which are fixed in the following series).
Cc-ing maintainers of all filesystems implementing ->atomic_open().
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Cc: Eric Van Hensbergen <ericvh@gmail.com>
Cc: Sage Weil <sage@inktank.com>
Cc: Steve French <sfrench@samba.org>
Cc: Steven Whitehouse <swhiteho@redhat.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/filesystems/vfs.txt | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index f93a88250a44..deb48b5fd883 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -359,11 +359,9 @@ struct inode_operations { | |||
359 | ssize_t (*listxattr) (struct dentry *, char *, size_t); | 359 | ssize_t (*listxattr) (struct dentry *, char *, size_t); |
360 | int (*removexattr) (struct dentry *, const char *); | 360 | int (*removexattr) (struct dentry *, const char *); |
361 | void (*update_time)(struct inode *, struct timespec *, int); | 361 | void (*update_time)(struct inode *, struct timespec *, int); |
362 | int (*atomic_open)(struct inode *, struct dentry *, | 362 | int (*atomic_open)(struct inode *, struct dentry *, struct file *, |
363 | unsigned open_flag, umode_t create_mode, int *opened); | ||
363 | int (*tmpfile) (struct inode *, struct dentry *, umode_t); | 364 | int (*tmpfile) (struct inode *, struct dentry *, umode_t); |
364 | } ____cacheline_aligned; | ||
365 | struct file *, unsigned open_flag, | ||
366 | umode_t create_mode, int *opened); | ||
367 | }; | 365 | }; |
368 | 366 | ||
369 | Again, all methods are called without any locks being held, unless | 367 | Again, all methods are called without any locks being held, unless |
@@ -470,9 +468,11 @@ otherwise noted. | |||
470 | method the filesystem can look up, possibly create and open the file in | 468 | method the filesystem can look up, possibly create and open the file in |
471 | one atomic operation. If it cannot perform this (e.g. the file type | 469 | one atomic operation. If it cannot perform this (e.g. the file type |
472 | turned out to be wrong) it may signal this by returning 1 instead of | 470 | turned out to be wrong) it may signal this by returning 1 instead of |
473 | usual 0 or -ve . This method is only called if the last | 471 | usual 0 or -ve . This method is only called if the last component is |
474 | component is negative or needs lookup. Cached positive dentries are | 472 | negative or needs lookup. Cached positive dentries are still handled by |
475 | still handled by f_op->open(). | 473 | f_op->open(). If the file was created, the FILE_CREATED flag should be |
474 | set in "opened". In case of O_EXCL the method must only succeed if the | ||
475 | file didn't exist and hence FILE_CREATED shall always be set on success. | ||
476 | 476 | ||
477 | tmpfile: called in the end of O_TMPFILE open(). Optional, equivalent to | 477 | tmpfile: called in the end of O_TMPFILE open(). Optional, equivalent to |
478 | atomically creating, opening and unlinking a file in given directory. | 478 | atomically creating, opening and unlinking a file in given directory. |