netdev
[Top] [All Lists]

Re: Early SPECWeb99 results on 2.5.33 with TSO on e1000

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: Re: Early SPECWeb99 results on 2.5.33 with TSO on e1000
From: Jeff Garzik <jgarzik@xxxxxxxxxxxxxxxx>
Date: Mon, 16 Sep 2002 20:01:24 -0400
Cc: dwmw2@xxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, todd-lkml@xxxxxxxxxxxxx, hadi@xxxxxxxxxx, tcw@xxxxxxxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx, pfeather@xxxxxxxxxx
Organization: MandrakeSoft
References: <3D86645F.5030401@xxxxxxxxxxxxxxxx> <20020916.160210.70782700.davem@xxxxxxxxxx> <3D866DD5.4080207@xxxxxxxxxxxxxxxx> <20020916.164343.128145825.davem@xxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826
David S. Miller wrote:
   From: Jeff Garzik <jgarzik@xxxxxxxxxxxxxxxx>
   Date: Mon, 16 Sep 2002 19:48:37 -0400

I dunno when it happened, but 2.5.x now returns EINVAL for all file->file cases. In 2.4.x, if sendpage is NULL, file_send_actor in mm/filemap.c faked a call to fops->write().
   In 2.5.x, if sendpage is NULL, EINVAL is unconditionally returned.
What if source and destination file and offsets match?


The same data is written out.  No deadlock.
(unless the attached test is wrong)

        Jeff


#include <sys/sendfile.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>

int main (int argc, char *argv[])
{
        int in, out;
        struct stat st;
        off_t off = 0;
        ssize_t rc;

        in = open("test.data", O_RDONLY);
        if (in < 0) {
                perror("test.data read");
                return 1;
        }

        fstat(in, &st);

        out = open("test.data", O_WRONLY);
        if (out < 0) {
                perror("test.data write");
                return 1;
        }

        rc = sendfile(out, in, &off, st.st_size);
        if (rc < 0) {
                perror("sendfile");
                close(in);
                unlink("out");
                close(out);
                return 1;
        }

        close(in);
        close(out);
        return 0;
}

<Prev in Thread] Current Thread [Next in Thread>