read/write on directory?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

While tracking my ENOENT bug, I noticed that running vi while cwd was on
the glusterfs volume produced that:

[2011-11-10 15:56:16.395189] W [read-ahead.c:496:ra_readv]
0-gfs-read-ahead: readv received on fd (0xb8c013fc) with no file set in
its context[2011-11-10 15:56:16.395523] W [page.c:979:__ioc_page_error]
0-gfs-io-cache: page error for page = 0xad814060 & waitq = 0xacf0ec20

I can narrow this down to this test case. Running it while cwd is on the
glusterfs volume produces the warning above, on NetBSD:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <err.h>
#include <sysexits.h>


int
main(void) {
        int fd;
        char buf[1];

        if ((fd = open("./", 0, 0)) == -1)
                err(EX_OSERR, "open failed");

        if (read(fd, buf, sizeof(buf)) == -1)
                err(EX_OSERR, "read failed");

        if (close(fd) == -1)
                err(EX_OSERR, "read failed");

        return 0;
}

As I understand the problem here is that Linux returns EISDIR when doing
read/write on a directory, while NetBSD tolerates that. I suspect
glusterfs on Linux nevers sees a read on a directory, as this is
rejected by the kernel.

What is the proper fix? Change NetBSD FUSE to catch read/write on
directories and return EISDIR? Or make make sure glusterfs ignores the
operation and returns no data?


-- 
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
manu@xxxxxxxxxx



[Index of Archives]     [Gluster Users]     [Ceph Users]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux