On Tue, May 17, 2011 at 8:43 PM, Venkateswararao Jujjuri (JV) <jv...@linux.vnet.ibm.com> wrote: > @@ -3621,8 +3605,13 @@ static void v9fs_readlink(void *opaque) > > v9fs_string_init(&vs->target); > err = v9fs_do_readlink(s, &fidp->path, &vs->target); > - v9fs_readlink_post_readlink(s, vs, err); > - return; > + if (err < 0) { > + err = -errno; > + goto out; > + } > + vs->offset += pdu_marshal(vs->pdu, vs->offset, "s", &vs->target); > + err = vs->offset; > + v9fs_string_free(&vs->target); > out:
The vs->target string should be freed when v9fs_do_readlink() fails. v9fs_do_readlink() *always* allocates vs->target.data, it doesn't free it on error. Stefan