summaryrefslogtreecommitdiff
path: root/source4/ntvfs
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-05-19 15:10:39 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:08:09 -0500
commit7f0e17e9030ad734977f66c2cc27faec501154a2 (patch)
treedc44952b04d4e61fb8fcff50b4a3cb720276b57d /source4/ntvfs
parent472c0886254b82c2feffea734a80c4d29bd773b6 (diff)
downloadsamba-7f0e17e9030ad734977f66c2cc27faec501154a2.tar.gz
samba-7f0e17e9030ad734977f66c2cc27faec501154a2.tar.bz2
samba-7f0e17e9030ad734977f66c2cc27faec501154a2.zip
r15718: - split the SMBflush with the 0xFFFF wildcard fnum into a different level
metze (This used to be commit 95bf41b4d4ec96349802955e364fe44ef85f9077)
Diffstat (limited to 'source4/ntvfs')
-rw-r--r--source4/ntvfs/nbench/vfs_nbench.c13
-rw-r--r--source4/ntvfs/posix/pvfs_flush.c22
-rw-r--r--source4/ntvfs/simple/vfs_simple.c18
3 files changed, 40 insertions, 13 deletions
diff --git a/source4/ntvfs/nbench/vfs_nbench.c b/source4/ntvfs/nbench/vfs_nbench.c
index 77de979153..963d422cf0 100644
--- a/source4/ntvfs/nbench/vfs_nbench.c
+++ b/source4/ntvfs/nbench/vfs_nbench.c
@@ -534,10 +534,19 @@ static NTSTATUS nbench_seek(struct ntvfs_module_context *ntvfs,
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);
}
diff --git a/source4/ntvfs/posix/pvfs_flush.c b/source4/ntvfs/posix/pvfs_flush.c
index d21f257201..c1d8820c43 100644
--- a/source4/ntvfs/posix/pvfs_flush.c
+++ b/source4/ntvfs/posix/pvfs_flush.c
@@ -46,23 +46,27 @@ NTSTATUS pvfs_flush(struct ntvfs_module_context *ntvfs,
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)) {
- return NT_STATUS_OK;
- }
+ 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);
+ /* 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_OK;
+ return NT_STATUS_INVALID_LEVEL;
}
diff --git a/source4/ntvfs/simple/vfs_simple.c b/source4/ntvfs/simple/vfs_simple.c
index 35c18e3f1c..1698f57aee 100644
--- a/source4/ntvfs/simple/vfs_simple.c
+++ b/source4/ntvfs/simple/vfs_simple.c
@@ -549,8 +549,22 @@ static NTSTATUS svfs_flush(struct ntvfs_module_context *ntvfs,
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;
}
/*