On Tue, Feb 1, 2011 at 5:26 AM, M. Mohan Kumar <mo...@in.ibm.com> wrote:
> +/* Receive file descriptor and error status from chroot process */
> +static int v9fs_receivefd(int sockfd, int *error)

The return value and int *error overlap in functionality.  Would it be
possible to have only one mechanism for returning errors?

*error = 0 is never done so a caller that passes an uninitialized
local variable gets back junk when the function succeeds.  It would be
safer to clear it at the start of this function.

Inconsistent use of errno constants and -1:
return -EIO;
return -1; /* == -EPERM, probably not what you wanted */

How about getting rid of int *error and returning the -errno?  If
if_error is set then return -fd_info.error.

> +/*
> + * V9fsFileObjectRequest is written into the socket by QEMU process.
> + * Then this request is read by chroot process using read_request function
> + */
> +static int v9fs_write_request(int sockfd, V9fsFileObjectRequest *request)
> +{
> +    int retval, length;
> +    char *buff, *buffp;
> +
> +    length = sizeof(request->data) + request->data.path_len +
> +                    request->data.oldpath_len;
> +
> +    buff = qemu_malloc(length);
> +    buffp = buff;
> +    memcpy(buffp, &request->data, sizeof(request->data));
> +    buffp += sizeof(request->data);
> +    memcpy(buffp, request->path.path, request->data.path_len);
> +    buffp += request->data.path_len;
> +    memcpy(buffp, request->path.old_path, request->data.oldpath_len);
> +
> +    retval = qemu_write_full(sockfd, buff, length);

qemu_free(buff);

Also, weren't you doing the malloc() + single write() to avoid
interleaved write()?  Is that still necessary, I thought a mutex was
introduced?  It's probably worth adding a comment to explain why
you're doing the malloc + write.

Stefan

Reply via email to