mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
This pull request brings:
- a fix to a minor bug reported by Coverity - throttling support in the local backend (command line only) -----BEGIN PGP SIGNATURE----- iEYEABECAAYFAli1Q64ACgkQAvw66wEB28I5yQCePbLPSOtHO4LJGc2E973L7vH2 hQIAnReLFevyNN6BpivucP2/0YmAIKSi =uTYd -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/gkurz/tags/for-upstream' into staging This pull request brings: - a fix to a minor bug reported by Coverity - throttling support in the local backend (command line only) # gpg: Signature made Tue 28 Feb 2017 09:32:30 GMT # gpg: using DSA key 0x02FC3AEB0101DBC2 # gpg: Good signature from "Greg Kurz <groug@kaod.org>" # gpg: aka "Greg Kurz <groug@free.fr>" # gpg: aka "Greg Kurz <gkurz@linux.vnet.ibm.com>" # gpg: aka "Gregory Kurz (Groug) <groug@free.fr>" # gpg: aka "[jpeg image of size 3330]" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 2BD4 3B44 535E C0A7 9894 DBA2 02FC 3AEB 0101 DBC2 * remotes/gkurz/tags/for-upstream: throttle: factor out duplicate code fsdev: add IO throttle support to fsdev devices 9pfs: fix v9fs_lock error case Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
9514f2648c
11 changed files with 289 additions and 87 deletions
|
@ -1208,6 +1208,7 @@ static int local_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse)
|
|||
{
|
||||
const char *sec_model = qemu_opt_get(opts, "security_model");
|
||||
const char *path = qemu_opt_get(opts, "path");
|
||||
Error *err = NULL;
|
||||
|
||||
if (!sec_model) {
|
||||
error_report("Security model not specified, local fs needs security model");
|
||||
|
@ -1236,6 +1237,13 @@ static int local_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse)
|
|||
error_report("fsdev: No path specified");
|
||||
return -1;
|
||||
}
|
||||
|
||||
fsdev_throttle_parse_opts(opts, &fse->fst, &err);
|
||||
if (err) {
|
||||
error_reportf_err(err, "Throttle configuration is not valid: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
fse->path = g_strdup(path);
|
||||
|
||||
return 0;
|
||||
|
|
19
hw/9pfs/9p.c
19
hw/9pfs/9p.c
|
@ -3010,7 +3010,6 @@ out_nofid:
|
|||
*/
|
||||
static void coroutine_fn v9fs_lock(void *opaque)
|
||||
{
|
||||
int8_t status;
|
||||
V9fsFlock flock;
|
||||
size_t offset = 7;
|
||||
struct stat stbuf;
|
||||
|
@ -3018,7 +3017,6 @@ static void coroutine_fn v9fs_lock(void *opaque)
|
|||
int32_t fid, err = 0;
|
||||
V9fsPDU *pdu = opaque;
|
||||
|
||||
status = P9_LOCK_ERROR;
|
||||
v9fs_string_init(&flock.client_id);
|
||||
err = pdu_unmarshal(pdu, offset, "dbdqqds", &fid, &flock.type,
|
||||
&flock.flags, &flock.start, &flock.length,
|
||||
|
@ -3044,15 +3042,15 @@ static void coroutine_fn v9fs_lock(void *opaque)
|
|||
if (err < 0) {
|
||||
goto out;
|
||||
}
|
||||
status = P9_LOCK_SUCCESS;
|
||||
err = pdu_marshal(pdu, offset, "b", P9_LOCK_SUCCESS);
|
||||
if (err < 0) {
|
||||
goto out;
|
||||
}
|
||||
err += offset;
|
||||
trace_v9fs_lock_return(pdu->tag, pdu->id, P9_LOCK_SUCCESS);
|
||||
out:
|
||||
put_fid(pdu, fidp);
|
||||
out_nofid:
|
||||
err = pdu_marshal(pdu, offset, "b", status);
|
||||
if (err > 0) {
|
||||
err += offset;
|
||||
}
|
||||
trace_v9fs_lock_return(pdu->tag, pdu->id, status);
|
||||
pdu_complete(pdu, err);
|
||||
v9fs_string_free(&flock.client_id);
|
||||
}
|
||||
|
@ -3531,6 +3529,10 @@ int v9fs_device_realize_common(V9fsState *s, Error **errp)
|
|||
error_setg(errp, "share path %s is not a directory", fse->path);
|
||||
goto out;
|
||||
}
|
||||
|
||||
s->ctx.fst = &fse->fst;
|
||||
fsdev_throttle_init(s->ctx.fst);
|
||||
|
||||
v9fs_path_free(&path);
|
||||
|
||||
rc = 0;
|
||||
|
@ -3551,6 +3553,7 @@ void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
|
|||
if (s->ops->cleanup) {
|
||||
s->ops->cleanup(&s->ctx);
|
||||
}
|
||||
fsdev_throttle_cleanup(s->ctx.fst);
|
||||
g_free(s->tag);
|
||||
g_free(s->ctx.fs_root);
|
||||
}
|
||||
|
|
|
@ -247,6 +247,7 @@ int coroutine_fn v9fs_co_pwritev(V9fsPDU *pdu, V9fsFidState *fidp,
|
|||
if (v9fs_request_cancelled(pdu)) {
|
||||
return -EINTR;
|
||||
}
|
||||
fsdev_co_throttle_request(s->ctx.fst, true, iov, iovcnt);
|
||||
v9fs_co_run_in_worker(
|
||||
{
|
||||
err = s->ops->pwritev(&s->ctx, &fidp->fs, iov, iovcnt, offset);
|
||||
|
@ -266,6 +267,7 @@ int coroutine_fn v9fs_co_preadv(V9fsPDU *pdu, V9fsFidState *fidp,
|
|||
if (v9fs_request_cancelled(pdu)) {
|
||||
return -EINTR;
|
||||
}
|
||||
fsdev_co_throttle_request(s->ctx.fst, false, iov, iovcnt);
|
||||
v9fs_co_run_in_worker(
|
||||
{
|
||||
err = s->ops->preadv(&s->ctx, &fidp->fs, iov, iovcnt, offset);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue