[Samba] open(2) O_DIRECT on smbmount gives EINVAL
tupple
samba at esilo.com
Sun Oct 15 01:32:05 GMT 2006
Does samba 3.0.23c not support the use of O_DIRECT? When I try to open an
smbmount'd file using O_DIRECT, I get EINVAL. I am able to use O_DIRECT with no
problems on a block device and nfs mounts, so I know the kernel supports it.
samba: 3.0.23c
kernel: 2.6.9-42.0.3.EL (32-bit)
I am using the below code for my test. smb fails on open(2).
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdint.h>
#define SECTORSIZE 512
#define ALIGN_NUM(val, mult) (((val) + ((mult) - 1)) & ~(((mult) - 1)))
#define ALIGN_PTR(ptr, mult) (void *)ALIGN_NUM((uintptr_t)(ptr), mult)
#define DECL_ALIGNED_BUFFER(name, size) \
char __##name[(size) + SECTORSIZE]; \
char *name = (char *)ALIGN_PTR(__##name, SECTORSIZE)
#define TEST_FILE "test.txt"
int main(void)
{
int fd;
int len = SECTORSIZE;
DECL_ALIGNED_BUFFER(buf, len);
unlink(TEST_FILE);
errno = 0;
// smb fails here
fd = open(TEST_FILE, O_WRONLY|O_CREAT|O_EXCL|O_DIRECT, 0777);
if(fd == -1)
{
perror("open");
return 1;
}
memset(buf, ' ', len);
memcpy(buf, "hello\n", 6);
if(write(fd, buf, len) == -1)
{
perror("write");
close(fd);
return 1;
}
close(fd);
printf("success\n");
return 0;
}
thanks
More information about the samba
mailing list