svn commit: samba r15718 - in branches/SAMBA_4_0/source: libcli/raw
ntvfs/nbench ntvfs/posix ntvfs/simple smb_server/smb
torture/basic torture/nbench torture/raw
metze at samba.org
metze at samba.org
Fri May 19 15:10:43 GMT 2006
Author: metze
Date: 2006-05-19 15:10:39 +0000 (Fri, 19 May 2006)
New Revision: 15718
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15718
Log:
- split the SMBflush with the 0xFFFF wildcard fnum into a different level
metze
Modified:
branches/SAMBA_4_0/source/libcli/raw/interfaces.h
branches/SAMBA_4_0/source/libcli/raw/rawfile.c
branches/SAMBA_4_0/source/ntvfs/nbench/vfs_nbench.c
branches/SAMBA_4_0/source/ntvfs/posix/pvfs_flush.c
branches/SAMBA_4_0/source/ntvfs/simple/vfs_simple.c
branches/SAMBA_4_0/source/smb_server/smb/reply.c
branches/SAMBA_4_0/source/torture/basic/delaywrite.c
branches/SAMBA_4_0/source/torture/nbench/nbio.c
branches/SAMBA_4_0/source/torture/raw/close.c
Changeset:
Modified: branches/SAMBA_4_0/source/libcli/raw/interfaces.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/interfaces.h 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/libcli/raw/interfaces.h 2006-05-19 15:10:39 UTC (rev 15718)
@@ -1725,13 +1725,20 @@
} ntioctl;
};
+enum smb_flush_level {RAW_FLUSH_FLUSH, RAW_FLUSH_ALL};
+
/* struct for SMBflush */
union smb_flush {
struct {
+ enum smb_ioctl_level level;
struct {
union smb_handle file;
} in;
} flush, generic;
+
+ struct {
+ enum smb_ioctl_level level;
+ } flush_all;
};
Modified: branches/SAMBA_4_0/source/libcli/raw/rawfile.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawfile.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/libcli/raw/rawfile.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -849,9 +849,19 @@
struct smbcli_request *smb_raw_flush_send(struct smbcli_tree *tree, union smb_flush *parms)
{
struct smbcli_request *req;
+ uint16_t fnum;
+ switch (parms->generic.level) {
+ case RAW_FLUSH_FLUSH:
+ fnum = parms->flush.in.file.fnum;
+ break;
+ case RAW_FLUSH_ALL:
+ fnum = 0xFFFF;
+ break;
+ }
+
SETUP_REQUEST(SMBflush, 1, 0);
- SSVAL(req->out.vwv, VWV(0), parms->flush.in.file.fnum);
+ SSVAL(req->out.vwv, VWV(0), fnum);
if (!smbcli_request_send(req)) {
smbcli_request_destroy(req);
Modified: branches/SAMBA_4_0/source/ntvfs/nbench/vfs_nbench.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/nbench/vfs_nbench.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/ntvfs/nbench/vfs_nbench.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -534,10 +534,19 @@
static void nbench_flush_send(struct ntvfs_request *req)
{
union smb_flush *io = req->async_states->private_data;
+ uint16_t fnum;
+ switch (io->generic.level) {
+ case RAW_FLUSH_FLUSH:
+ fnum = io->flush.in.file.fnum;
+ break;
+ case RAW_FLUSH_ALL:
+ fnum = 0xFFFF;
+ break;
+ }
+
nbench_log(req, "Flush %d %s\n",
- io->flush.in.file.fnum,
- get_nt_error_c_code(req->async_states->status));
+ fnum, get_nt_error_c_code(req->async_states->status));
PASS_THRU_REP_POST(req);
}
Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_flush.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_flush.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_flush.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -46,23 +46,27 @@
struct pvfs_state *pvfs = ntvfs->private_data;
struct pvfs_file *f;
- if (io->flush.in.file.fnum != 0xFFFF) {
+ switch (io->generic.level) {
+ case RAW_FLUSH_FLUSH:
f = pvfs_find_fd(pvfs, req, io->flush.in.file.fnum);
if (!f) {
return NT_STATUS_INVALID_HANDLE;
}
pvfs_flush_file(pvfs, f);
return NT_STATUS_OK;
- }
- if (!(pvfs->flags & PVFS_FLAG_STRICT_SYNC)) {
+ case RAW_FLUSH_ALL:
+ if (!(pvfs->flags & PVFS_FLAG_STRICT_SYNC)) {
+ return NT_STATUS_OK;
+ }
+
+ /* they are asking to flush all open files */
+ for (f=pvfs->files.list;f;f=f->next) {
+ pvfs_flush_file(pvfs, f);
+ }
+
return NT_STATUS_OK;
}
- /* they are asking to flush all open files */
- for (f=pvfs->files.list;f;f=f->next) {
- pvfs_flush_file(pvfs, f);
- }
-
- return NT_STATUS_OK;
+ return NT_STATUS_INVALID_LEVEL;
}
Modified: branches/SAMBA_4_0/source/ntvfs/simple/vfs_simple.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/simple/vfs_simple.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/ntvfs/simple/vfs_simple.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -549,8 +549,22 @@
struct ntvfs_request *req,
union smb_flush *io)
{
- fsync(io->flush.in.file.fnum);
- return NT_STATUS_OK;
+ struct svfs_private *private = ntvfs->private_data;
+ struct svfs_file *f;
+
+ switch (io->generic.level) {
+ case RAW_FLUSH_FLUSH:
+ fsync(io->flush.in.file.fnum);
+ return NT_STATUS_OK;
+
+ case RAW_FLUSH_ALL:
+ for (f=private->open_files;f;f=f->next) {
+ fsync(f->fd);
+ }
+ return NT_STATUS_OK;
+ }
+
+ return NT_STATUS_INVALID_LEVEL;
}
/*
Modified: branches/SAMBA_4_0/source/smb_server/smb/reply.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/reply.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/smb_server/smb/reply.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -1069,14 +1069,22 @@
void smbsrv_reply_flush(struct smbsrv_request *req)
{
union smb_flush *io;
+ uint16_t fnum;
/* parse request */
SMBSRV_CHECK_WCT(req, 1);
SMBSRV_TALLOC_IO_PTR(io, union smb_flush);
SMBSRV_SETUP_NTVFS_REQUEST(reply_simple_send, NTVFS_ASYNC_STATE_MAY_ASYNC);
- io->flush.in.file.fnum = req_fnum(req, req->in.vwv, VWV(0));
+ fnum = req_fnum(req, req->in.vwv, VWV(0));
+ if (fnum == 0xFFFF) {
+ io->flush_all.level = RAW_FLUSH_ALL;
+ } else {
+ io->flush.level = RAW_FLUSH_FLUSH;
+ io->flush.in.file.fnum = fnum;
+ }
+
SMBSRV_CALL_NTVFS_BACKEND(ntvfs_flush(req->ntvfs, io));
}
Modified: branches/SAMBA_4_0/source/torture/basic/delaywrite.c
===================================================================
--- branches/SAMBA_4_0/source/torture/basic/delaywrite.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/torture/basic/delaywrite.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -253,6 +253,7 @@
printf("Doing flush after write\n");
+ flsh.flush.level = RAW_FLUSH_FLUSH;
flsh.flush.in.file.fnum = fnum1;
status = smb_raw_flush(cli->tree, &flsh);
if (!NT_STATUS_IS_OK(status)) {
Modified: branches/SAMBA_4_0/source/torture/nbench/nbio.c
===================================================================
--- branches/SAMBA_4_0/source/torture/nbench/nbio.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/torture/nbench/nbio.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -646,7 +646,8 @@
int i;
i = find_handle(fnum);
- io.flush.in.file.fnum = i;
+ io.flush.level = RAW_FLUSH_FLUSH;
+ io.flush.in.file.fnum = i;
ret = smb_raw_flush(c->tree, &io);
Modified: branches/SAMBA_4_0/source/torture/raw/close.c
===================================================================
--- branches/SAMBA_4_0/source/torture/raw/close.c 2006-05-19 14:44:50 UTC (rev 15717)
+++ branches/SAMBA_4_0/source/torture/raw/close.c 2006-05-19 15:10:39 UTC (rev 15718)
@@ -144,24 +144,27 @@
printf("testing flush\n");
smbcli_close(cli->tree, fnum);
- io_flush.flush.in.file.fnum = fnum;
+ io_flush.flush.level = RAW_FLUSH_FLUSH;
+ io_flush.flush.in.file.fnum = fnum;
status = smb_raw_flush(cli->tree, &io_flush);
CHECK_STATUS(status, NT_STATUS_INVALID_HANDLE);
- io_flush.flush.in.file.fnum = 0xffff;
+ io_flush.flush_all.level = RAW_FLUSH_ALL;
status = smb_raw_flush(cli->tree, &io_flush);
CHECK_STATUS(status, NT_STATUS_OK);
REOPEN;
- io_flush.flush.in.file.fnum = fnum;
+ io_flush.flush.level = RAW_FLUSH_FLUSH;
+ io_flush.flush.in.file.fnum = fnum;
status = smb_raw_flush(cli->tree, &io_flush);
CHECK_STATUS(status, NT_STATUS_OK);
printf("Testing SMBexit\n");
smb_raw_exit(cli->session);
- io_flush.flush.in.file.fnum = fnum;
+ io_flush.flush.level = RAW_FLUSH_FLUSH;
+ io_flush.flush.in.file.fnum = fnum;
status = smb_raw_flush(cli->tree, &io_flush);
CHECK_STATUS(status, NT_STATUS_INVALID_HANDLE);
More information about the samba-cvs
mailing list