A future-proofing decoding fix from Jeff intended for stable and
a patch for a mostly benign race from Dongsheng. -----BEGIN PGP SIGNATURE----- iQFHBAABCAAxFiEEydHwtzie9C7TfviiSn/eOAIR84sFAl2qAEkTHGlkcnlvbW92 QGdtYWlsLmNvbQAKCRBKf944AhHzi4mZB/9HMfEfZ8JC9keyVaJpAyvV8ufTR4qs 4b8NNc0MDM01z1Z23G0o89b5M0WEDcGslh25plCifxyNIMa+L/lYKl8CTr7CLVQS qCEtNgJ7ibfM26v7rfHOlk6Nnd07/OmjcioaHu/R3bqEQmXpcWQg+aX9C6mPh/2f yzZTKZdKhTZfUyQQctuhNo9G+wD8K86DYT1XRbubPNQ3VtXKPuNH9rLhvLCZzbVA 6FHW05A4mwSv80MsLgN6qLSKxv/+LjV/voHepH4HygqUKw2+1lwi9BC/4k7sprQs 1jFONZ0p1sv/LdWwJYUyCpwj6d3NliXM0uvYxfyzKveWWCxb3l3gaWUS =7scd -----END PGP SIGNATURE----- Merge tag 'ceph-for-5.4-rc4' of git://github.com/ceph/ceph-client Pull ceph fixes from Ilya Dryomov: "A future-proofing decoding fix from Jeff intended for stable and a patch for a mostly benign race from Dongsheng" * tag 'ceph-for-5.4-rc4' of git://github.com/ceph/ceph-client: rbd: cancel lock_dwork if the wait is interrupted ceph: just skip unrecognized info in ceph_reply_info_extra
This commit is contained in:
commit
6b95cf9b8b
|
@ -6639,10 +6639,13 @@ static int rbd_add_acquire_lock(struct rbd_device *rbd_dev)
|
|||
queue_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0);
|
||||
ret = wait_for_completion_killable_timeout(&rbd_dev->acquire_wait,
|
||||
ceph_timeout_jiffies(rbd_dev->opts->lock_timeout));
|
||||
if (ret > 0)
|
||||
if (ret > 0) {
|
||||
ret = rbd_dev->acquire_err;
|
||||
else if (!ret)
|
||||
ret = -ETIMEDOUT;
|
||||
} else {
|
||||
cancel_delayed_work_sync(&rbd_dev->lock_dwork);
|
||||
if (!ret)
|
||||
ret = -ETIMEDOUT;
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
rbd_warn(rbd_dev, "failed to acquire exclusive lock: %ld", ret);
|
||||
|
|
|
@ -384,8 +384,8 @@ static int parse_reply_info_readdir(void **p, void *end,
|
|||
}
|
||||
|
||||
done:
|
||||
if (*p != end)
|
||||
goto bad;
|
||||
/* Skip over any unrecognized fields */
|
||||
*p = end;
|
||||
return 0;
|
||||
|
||||
bad:
|
||||
|
@ -406,12 +406,10 @@ static int parse_reply_info_filelock(void **p, void *end,
|
|||
goto bad;
|
||||
|
||||
info->filelock_reply = *p;
|
||||
*p += sizeof(*info->filelock_reply);
|
||||
|
||||
if (unlikely(*p != end))
|
||||
goto bad;
|
||||
/* Skip over any unrecognized fields */
|
||||
*p = end;
|
||||
return 0;
|
||||
|
||||
bad:
|
||||
return -EIO;
|
||||
}
|
||||
|
@ -425,18 +423,21 @@ static int parse_reply_info_create(void **p, void *end,
|
|||
{
|
||||
if (features == (u64)-1 ||
|
||||
(features & CEPH_FEATURE_REPLY_CREATE_INODE)) {
|
||||
/* Malformed reply? */
|
||||
if (*p == end) {
|
||||
info->has_create_ino = false;
|
||||
} else {
|
||||
info->has_create_ino = true;
|
||||
info->ino = ceph_decode_64(p);
|
||||
ceph_decode_64_safe(p, end, info->ino, bad);
|
||||
}
|
||||
} else {
|
||||
if (*p != end)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
if (unlikely(*p != end))
|
||||
goto bad;
|
||||
/* Skip over any unrecognized fields */
|
||||
*p = end;
|
||||
return 0;
|
||||
|
||||
bad:
|
||||
return -EIO;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue