Skip to content

Commit

Permalink
Merge tag 'ceph-for-5.4-rc4' of git://github.com/ceph/ceph-client
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Linus Torvalds committed Oct 18, 2019
2 parents fb8527e + 25e6be2 commit 6b95cf9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
9 changes: 6 additions & 3 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
21 changes: 11 additions & 10 deletions fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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;
}
Expand All @@ -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;
}
Expand Down

0 comments on commit 6b95cf9

Please sign in to comment.