diff options
author | Sage Weil <sage@inktank.com> | 2012-07-31 14:27:36 -0400 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2012-08-02 12:11:19 -0400 |
commit | 5ef50c3bec20060bc114f62d6503c5d86d70bdd7 (patch) | |
tree | 0777f7c9bef358fe7778e11874a6a750e0d2ceab /fs/ceph/super.h | |
parent | 1a9b4993b70fb1884716902774dc9025b457760d (diff) |
ceph: simplify+fix atomic_open
The initial ->atomic_open op was carried over from the old intent code,
which was incomplete and didn't really work. Replace it with a fresh
method. In particular:
* always attempt to do an atomic open+lookup, both for the create case
and for lookups of existing files.
* fix symlink handling by returning 1 to the VFS so that we can follow
the link to its destination. This fixes a longstanding ceph bug (#2392).
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r-- | fs/ceph/super.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index ebc95cc652be..66ebe720e40d 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h | |||
@@ -806,9 +806,9 @@ extern int ceph_copy_from_page_vector(struct page **pages, | |||
806 | loff_t off, size_t len); | 806 | loff_t off, size_t len); |
807 | extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags); | 807 | extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags); |
808 | extern int ceph_open(struct inode *inode, struct file *file); | 808 | extern int ceph_open(struct inode *inode, struct file *file); |
809 | extern int ceph_lookup_open(struct inode *dir, struct dentry *dentry, | 809 | extern int ceph_atomic_open(struct inode *dir, struct dentry *dentry, |
810 | struct file *od, unsigned flags, | 810 | struct file *file, unsigned flags, umode_t mode, |
811 | umode_t mode, int *opened); | 811 | int *opened); |
812 | extern int ceph_release(struct inode *inode, struct file *filp); | 812 | extern int ceph_release(struct inode *inode, struct file *filp); |
813 | 813 | ||
814 | /* dir.c */ | 814 | /* dir.c */ |