ceph: Check for err on mds request in atomic_open
authorSam Lang <sam.lang@inktank.com>
Wed, 19 Dec 2012 19:44:23 +0000 (09:44 -1000)
committerAlex Elder <elder@inktank.com>
Thu, 17 Jan 2013 18:42:36 +0000 (12:42 -0600)
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>
fs/ceph/file.c

index d415096800a61753e0bac382dff8988176e88a09..2c71cbd78332880e866b72dfd1bc9ff6f40e161a 100644 (file)
@@ -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);