+ * add "fs flushall" command that forces all data buffers
+ to be flushed.
+
Since 1.4.0 rc2: 1.4.0 rc3 released (4 Sep 2005)
* add support for '/' instead of '\' in pioctl() calls
lock_ReleaseMutex(&scp->mx);
lock_ReleaseWrite(&scp->bufCreateLock);
+ afsi_log("cm_FlushFile scp 0x%x returns error: [%x]",scp, code);
return code;
}
return code;
}
+long cm_IoctlFlushAllVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp)
+{
+ long code;
+ cm_scache_t *scp;
+ unsigned long volume;
+ int i;
+ cm_req_t req;
+
+ cm_InitReq(&req);
+
+ lock_ObtainWrite(&cm_scacheLock);
+ for (i=0; i<cm_data.hashTableSize; i++) {
+ for (scp = cm_data.hashTablep[i]; scp; scp = scp->nextp) {
+ cm_HoldSCacheNoLock(scp);
+ lock_ReleaseWrite(&cm_scacheLock);
+
+ /* now flush the file */
+ code = cm_FlushFile(scp, userp, &req);
+ lock_ObtainWrite(&cm_scacheLock);
+ cm_ReleaseSCacheNoLock(scp);
+ }
+ }
+ lock_ReleaseWrite(&cm_scacheLock);
+
+ return code;
+}
+
long cm_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp)
{
long code;
/* now flush the file */
code = cm_FlushFile(scp, userp, &req);
- if ( code )
- afsi_log("cm_FlushFile returns error: [%x]",code);
lock_ObtainWrite(&cm_scacheLock);
cm_ReleaseSCacheNoLock(scp);
}
extern long cm_IoctlSetACL(smb_ioctl_t *ioctlp, cm_user_t *userp);
+extern long cm_IoctlFlushAllVolumes(smb_ioctl_t *ioctlp, cm_user_t *userp);
+
extern long cm_IoctlFlushVolume(smb_ioctl_t *ioctlp, cm_user_t *userp);
extern long cm_IoctlFlushFile(smb_ioctl_t *ioctlp, cm_user_t *userp);
}
static int
+FlushAllCmd(struct cmd_syndesc *as, char *arock)
+{
+ afs_int32 code;
+ struct ViceIoctl blob;
+ struct cmd_item *ti;
+
+ blob.in_size = blob.out_size = 0;
+ code = pioctl(NULL, VIOC_FLUSHALL, &blob, 0);
+ if (code) {
+ fprintf(stderr, "Error flushing all ");
+ return 1;
+ }
+ return 0;
+}
+
+static int
FlushVolumeCmd(struct cmd_syndesc *as, char *arock)
{
afs_int32 code;
cmd_AddParm(ts, "-cell", CMD_LIST, 0, "cell name");
cmd_AddParm(ts, "-suid", CMD_FLAG, CMD_OPTIONAL, "allow setuid programs");
cmd_AddParm(ts, "-nosuid", CMD_FLAG, CMD_OPTIONAL, "disallow setuid programs");
-
+
+ ts = cmd_CreateSyntax("flushall", FlushAllCmd, 0, "flush all data");
+
ts = cmd_CreateSyntax("flushvolume", FlushVolumeCmd, 0, "flush all data in volume");
cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path");
#define VIOC_SETRXKCRYPT 0x28
#define VIOC_TRACEMEMDUMP 0x29
#define VIOC_SHUTDOWN 0x2a
+#define VIOC_FLUSHALL 0x2b
#endif /* __SMB_IOCONS_H_ENV_ */
void smb_InitIoctl(void)
{
+ int i;
+ for (i=0; i<SMB_IOCTL_MAXPROCS; i++)
+ smb_ioctlProcsp[i] = NULL;
+
smb_ioctlProcsp[VIOCGETAL] = cm_IoctlGetACL;
smb_ioctlProcsp[VIOC_FILE_CELL_NAME] = cm_IoctlGetFileCellName;
smb_ioctlProcsp[VIOCSETAL] = cm_IoctlSetACL;
#endif
smb_ioctlProcsp[VIOC_TRACEMEMDUMP] = cm_IoctlMemoryDump;
smb_ioctlProcsp[VIOC_ISSYMLINK] = cm_IoctlIslink;
+ smb_ioctlProcsp[VIOC_FLUSHALL] = cm_IoctlFlushAllVolumes;
}
/* called to make a fid structure into an IOCTL fid structure */