From dbc6d4c5a8b0438f5ed7c501495e4f06f1c18c7a Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Mon, 7 Nov 2011 17:54:11 +0200 Subject: [PATCH] kvm tools: Add missing 9p remove handler This adds a remove handler which actually allows us to unlink files in the guest. Reported-by: Darren Hart Signed-off-by: Sasha Levin Signed-off-by: Pekka Enberg --- tools/kvm/virtio/9p.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c index 1569bb279e9f..08b1be7db3ac 100644 --- a/tools/kvm/virtio/9p.c +++ b/tools/kvm/virtio/9p.c @@ -677,6 +677,30 @@ err_out: return; } +static void virtio_p9_remove(struct p9_dev *p9dev, + struct p9_pdu *pdu, u32 *outlen) +{ + int ret; + u32 fid_val; + struct p9_fid *fid; + char full_path[PATH_MAX]; + + virtio_p9_pdu_readf(pdu, "d", &fid_val); + fid = &p9dev->fids[fid_val]; + + sprintf(full_path, "%s", fid->abs_path); + ret = remove(full_path); + if (ret < 0) + goto err_out; + *outlen = pdu->write_offset; + virtio_p9_set_reply_header(pdu, *outlen); + return; + +err_out: + virtio_p9_error_reply(p9dev, pdu, errno, outlen); + return; +} + static void virtio_p9_readlink(struct p9_dev *p9dev, struct p9_pdu *pdu, u32 *outlen) { @@ -1048,6 +1072,7 @@ static p9_handler *virtio_9p_dotl_handler [] = { [P9_TSYMLINK] = virtio_p9_symlink, [P9_TLCREATE] = virtio_p9_create, [P9_TWRITE] = virtio_p9_write, + [P9_TREMOVE] = virtio_p9_remove, }; static struct p9_pdu *virtio_p9_pdu_init(struct kvm *kvm, struct virt_queue *vq) -- 2.39.5