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