diff options
| author | Sam Lang <sam.lang@inktank.com> | 2012-12-19 09:44:23 -1000 | 
|---|---|---|
| committer | Alex Elder <elder@inktank.com> | 2013-01-17 12:42:36 -0600 | 
| commit | 79aec9844de339531f05b019644ccaf5dd777144 (patch) | |
| tree | 319409adbac648492c7d48f6d0ce2a97a255a537 /fs/ceph | |
| parent | 0fa6ebc600bc8e830551aee47a0e929e818a1868 (diff) | |
ceph: Check for err on mds request in atomic_open
The error returned by ceph_mdsc_do_request includes errors sending the
request, errors on timeout, or any errors coming from the mds.  If
ceph_mdsc_do_request returns an error, the reply struct will most likely
be bogus.  We need to bail out and propogate the error instead of
overwriting it.
Signed-off-by: Sam Lang <sam.lang@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'fs/ceph')
| -rw-r--r-- | fs/ceph/file.c | 3 | 
1 files changed, 3 insertions, 0 deletions
| diff --git a/fs/ceph/file.c b/fs/ceph/file.c index d415096800a6..2c71cbd78332 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -243,6 +243,9 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,  	err = ceph_mdsc_do_request(mdsc,  				   (flags & (O_CREAT|O_TRUNC)) ? dir : NULL,  				   req); +	if (err) +		goto out_err; +  	err = ceph_handle_snapdir(req, dentry, err);  	if (err == 0 && (flags & O_CREAT) && !req->r_reply_info.head->is_dentry)  		err = ceph_handle_notrace_create(dir, dentry); | 
