It should be possible for guest applications to fstat a file for which they
have a valid file descriptor, even if the file has been removed.
Demonstrated by the code sample below (fstat reports no such file or
directory).
Strangely it seems that reading from a file in this state works fine (and
when both are run, the server receives a different fid for each).
On any other filesystem, the code runs correctly. On our 9p filesystem it
fails.
Many applications (including bash) depend on this working correctly.
I will continue investigating, but any thoughts anyone has on the subject
would be appreciated.


Thanks
Sassan


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


int main(void)
{
        int ret;
        struct stat statbuf;
        int fd = open("test.txt", O_RDWR | O_CREAT, 0666);
        if (fd < 0) {
                printf("open failed: %m\n");
                return 1;
        }
        ret = write(fd, "test1\n", 6);
        if (ret < 0) {
                printf("write1 failed: %m\n");
                return 1;
        }
        ret = unlink("test.txt");
        if (ret < 0) {
                printf("unlink failed: %m\n");
                return 1;
        }
        ret = fstat(fd, &statbuf);
        if (ret < 0) {
                printf("fstat failed: %m\n");
                return 1;
        }
        return 0;
}

Reply via email to