* -dcache The number of data cache entries.
* -biods Number of bkg I/O daemons (AIX3.1 only)
* -prealloc Number of preallocated "small" memory blocks
- * -pininodes Number of inodes which can be spared from inode[] for
- * pointing at Vfiles. If this is set too high, you may have
- * system problems, which can only be ameliorated by changing
- * NINODE (or equivalent) and rebuilding the kernel.
- * This option is now disabled.
* -logfile [OBSOLETE] Place where to put the logfile (default in
* <cache>/etc/AFSLog.
* -waitclose make close calls always synchronous (slows em down, tho)
#include <afsconfig.h>
#include <afs/param.h>
+#ifdef IGNORE_SOME_GCC_WARNINGS
+# pragma GCC diagnostic warning "-Wdeprecated-declarations"
+#endif
#define VFS 1
#include <ctype.h>
#include <afs/afssyscalls.h>
#include <afs/afsutil.h>
+#include <afs/sys_prototypes.h>
#ifdef AFS_SGI61_ENV
#include <unistd.h>
#ifdef AFS_DARWIN_ENV
#ifdef AFS_DARWIN80_ENV
#include <sys/ioctl.h>
+#include <sys/xattr.h>
#endif
#include <mach/mach.h>
#ifndef AFS_DARWIN100_ENV
static int preallocs = 400; /* Def # of allocated memory blocks */
static int enable_peer_stats = 0; /* enable rx stats */
static int enable_process_stats = 0; /* enable rx stats */
-#ifdef AFS_AFSDB_ENV
static int enable_afsdb = 0; /* enable AFSDB support */
-#endif
static int enable_dynroot = 0; /* enable dynroot support */
static int enable_fakestat = 0; /* enable fakestat support */
static int enable_backuptree = 0; /* enable backup tree support */
static int enable_nomount = 0; /* do not mount */
static int enable_splitcache = 0;
-#ifdef notdef
-static int inodes = 60; /* VERY conservative, but has to be */
-#endif
int afsd_dynamic_vcaches = 0; /* Enable dynamic-vcache support */
int afsd_verbose = 0; /*Are we being chatty? */
int afsd_debug = 0; /*Are we printing debugging info? */
mint = totalblks / 100 * 95;
if (cs > mint) {
printf
- ("Cache size (%d) must be less than 95%% of partition size (which is %d). Lower cache size\n",
+ ("Cache size (%d) must be less than 95%% of partition size (which is %lld). Lower cache size\n",
cs, mint);
return 1;
}
return (0);
}
+static void
+SetNoBackupAttr(char *fullpn)
+{
+#ifdef AFS_DARWIN80_ENV
+ int ret;
+
+ ret = setxattr(fullpn, "com.apple.metadata:com_apple_backup_excludeItem",
+ "com.apple.backupd", strlen("com.apple.backupd"), 0,
+ XATTR_CREATE);
+ if(ret < 0)
+ {
+ if(errno != EEXIST)
+ fprintf(stderr, "afsd: Warning: failed to set attribute to preclude cache backup: %s\n", strerror(errno));
+ }
+#endif
+ return;
+}
+
static int
MoveCacheFile(char *basename, int fromDir, int toDir, int cacheFile,
int maxDir)
from, to, ret, errno);
return -1;
}
+ SetNoBackupAttr(to);
/* Reset directory pointer; fix file counts */
dir_for_V[cacheFile] = toDir;
* Found the file holding the dcache entries.
*/
missing_DCacheFile = 0;
+ SetNoBackupAttr(fullpn_DCacheFile);
} else if (dirNum < 0 && strcmp(currp->d_name, VOLINFOFILE) == 0) {
/*
* Found the file holding the volume info.
*/
missing_VolInfoFile = 0;
+ SetNoBackupAttr(fullpn_VolInfoFile);
} else if (dirNum < 0 && strcmp(currp->d_name, CELLINFOFILE) == 0) {
/*
* Found the file holding the cell info.
*/
missing_CellInfoFile = 0;
+ SetNoBackupAttr(fullpn_CellInfoFile);
} else if ((strcmp(currp->d_name, ".") == 0)
|| (strcmp(currp->d_name, "..") == 0) ||
#ifdef AFS_DECOSF_ENV
cache_dir_list[thisDir]++;
(*vFilesFound)++;
}
+ SetNoBackupAttr(fullpn_VFile);
}
} else if (dir_for_V[vFileNum] >= maxDir
return 0;
}
-#ifdef AFS_AFSDB_ENV
static void
AfsdbLookupHandler(void)
{
#endif
exit(1);
}
-#endif
#ifdef mac2
#include <sys/ioctl.h>
/* -prealloc */
preallocs = atoi(as->parms[16].items->data);
}
-#ifdef notdef
- if (as->parms[17].items) {
- /* -pininodes */
- inodes = atoi(as->parms[17].items->data);
- }
-#endif
strcpy(confDir, AFSDIR_CLIENT_ETC_DIRPATH);
if (as->parms[17].items) {
/* -confdir */
}
if (as->parms[23].items) {
/* -mem_alloc_sleep */
- cacheFlags |= AFSCALL_INIT_MEMCACHE_SLEEP;
+ printf("afsd: -mem_alloc_sleep is deprecated -- ignored\n");
}
if (as->parms[24].items) {
/* -afsdb */
-#ifdef AFS_AFSDB_ENV
enable_afsdb = 1;
-#else
- printf("afsd: No AFSDB support; ignoring -afsdb");
-#endif
}
if (as->parms[25].items) {
/* -files_per_subdir */
#endif
/* set -rxmaxmtu */
- if (as->parms[35].items) {
+ if (as->parms[36].items) {
/* -rxmaxmtu */
- rxmaxmtu = atoi(as->parms[35].items->data);
+ rxmaxmtu = atoi(as->parms[36].items->data);
}
/*
}
#endif
-#ifdef AFS_AFSDB_ENV
if (enable_afsdb) {
if (afsd_verbose)
printf("%s: Forking AFSDB lookup handler.\n", rn);
exit(1);
}
}
-#endif
code = call_syscall(AFSOP_BASIC_INIT, 1);
if (code) {
cparams.setTimeFlag = cacheSetTime;
cparams.memCacheFlag = cacheFlags;
cparams.dynamic_vcaches = afsd_dynamic_vcaches;
-#ifdef notdef
- cparams.inodes = inodes;
-#endif
call_syscall(AFSOP_CACHEINIT, &cparams);
/* do it before we init the cache inodes */
rn, vFilesFound, cacheFiles, cacheIteration);
} while ((vFilesFound < cacheFiles)
&& (cacheIteration < MAX_CACHE_LOOPS));
-#ifdef AFS_CACHE_VNODE_PATH
- if (afsd_debug)
- printf
- ("%s: Calling AFSOP_CACHEBASEDIR with '%s'\n",
- rn, cacheBaseDir);
- call_syscall(AFSOP_CACHEBASEDIR, cacheBaseDir);
- if (afsd_debug)
- printf
- ("%s: Calling AFSOP_CACHEDIRS with %d dirs\n",
- rn, nFilesPerDir);
- call_syscall(AFSOP_CACHEDIRS, nFilesPerDir);
- if (afsd_debug)
- printf
- ("%s: Calling AFSOP_CACHEFILES with %d files\n",
- rn, cacheFiles);
- call_syscall(AFSOP_CACHEFILES, cacheFiles);
-#endif
} else if (afsd_verbose)
printf("%s: Using memory cache, not swept\n", rn);
call_syscall(AFSOP_CELLINFO, fullpn_CellInfoFile);
if (rxmaxmtu) {
- if (afsd_verbose)
- printf("%s: Setting rxmaxmtu in kernel = %d\n", rn, rxmaxmtu);
- code = call_syscall(AFSOP_SET_RXMAXMTU, rxmaxmtu);
- if (code)
- printf("%s: Error seting rxmaxmtu\n", rn);
+ if (afsd_verbose)
+ printf("%s: Setting rxmaxmtu in kernel = %d\n", rn, rxmaxmtu);
+ code = call_syscall(AFSOP_SET_RXMAXMTU, rxmaxmtu);
+ if (code)
+ printf("%s: Error seting rxmaxmtu\n", rn);
}
if (enable_dynroot) {
if (!(cacheFlags & AFSCALL_INIT_MEMCACHE))
call_syscall(AFSOP_VOLUMEINFO, fullpn_VolInfoFile);
-#ifndef AFS_CACHE_VNODE_PATH
/*
* Give the kernel the names of the AFS files cached on the workstation's
* disk.
*/
if (afsd_debug)
printf
- ("%s: Calling AFSOP_CACHEINODE for each of the %d files in '%s'\n",
+ ("%s: Calling AFSOP_CACHEFILE for each of the %d files in '%s'\n",
rn, cacheFiles, cacheBaseDir);
- if (!(cacheFlags & AFSCALL_INIT_MEMCACHE)) /* ... and again ... */
+ if (!(cacheFlags & AFSCALL_INIT_MEMCACHE)) {
+ /* ... and again ... */
+ int nocachefile = 0;
for (currVFile = 0; currVFile < cacheFiles; currVFile++) {
+ if (!nocachefile) {
+ sprintf(fullpn_VFile, "%s/D%d/V%d", cacheBaseDir, dir_for_V[currVFile], currVFile);
+ code = call_syscall(AFSOP_CACHEFILE, fullpn_VFile);
+ if (code) {
+ if (currVFile == 0) {
+ if (afsd_debug)
+ printf
+ ("%s: Calling AFSOP_CACHEINODE for each of the %d files in '%s'\n",
+ rn, cacheFiles, cacheBaseDir);
+ nocachefile = 1;
+ } else {
+ printf
+ ("%s: Error calling AFSOP_CACHEFILE for '%s'\n",
+ rn, fullpn_VFile);
+ exit(1);
+ }
+ } else {
+ continue;
+ }
+ /* fall through to setup-by-inode */
+ }
#ifdef AFS_SGI62_ENV
call_syscall(AFSOP_CACHEINODE,
(afs_uint32) (inode_for_V[currVFile] >> 32),
(afs_uint32) (inode_for_V[currVFile] & 0xffffffff));
-#else
-#if defined(LINUX_USE_FH)
- sprintf(fullpn_VFile, "%s/D%d/V%d", cacheBaseDir, dir_for_V[currVFile], currVFile);
- call_syscall(AFSOP_CACHEFILE, fullpn_VFile);
-#else
+#elif !(defined(LINUX_USE_FH) || defined(AFS_CACHE_VNODE_PATH))
call_syscall(AFSOP_CACHEINODE, inode_for_V[currVFile]);
-#endif
+#else
+ printf
+ ("%s: Error calling AFSOP_CACHEINODE: not configured\n",
+ rn);
+ exit(1);
#endif
}
-#endif
-
+ }
/*end for */
/*
* All the necessary info has been passed into the kernel to run an AFS
struct cmd_syndesc *ts;
ts = cmd_CreateSyntax(NULL, mainproc, NULL, "start AFS");
+
+ /* 0 - 10 */
cmd_AddParm(ts, "-blocks", CMD_SINGLE, CMD_OPTIONAL,
"1024 byte blocks in cache");
cmd_AddParm(ts, "-files", CMD_SINGLE, CMD_OPTIONAL, "files in cache");
"display lots of information");
cmd_AddParm(ts, "-rmtsys", CMD_FLAG, CMD_OPTIONAL,
"start NFS rmtsysd program");
+
+ /* 11 - 20 */
cmd_AddParm(ts, "-debug", CMD_FLAG, CMD_OPTIONAL, "display debug info");
cmd_AddParm(ts, "-chunksize", CMD_SINGLE, CMD_OPTIONAL,
"log(2) of chunk size");
"number of volume entries");
cmd_AddParm(ts, "-biods", CMD_SINGLE, CMD_OPTIONAL,
"number of bkg I/O daemons (aix vm)");
-
cmd_AddParm(ts, "-prealloc", CMD_SINGLE, CMD_OPTIONAL,
"number of 'small' preallocated blocks");
-#ifdef notdef
- cmd_AddParm(ts, "-pininodes", CMD_SINGLE, CMD_OPTIONAL,
- "number of inodes to hog");
-#endif
cmd_AddParm(ts, "-confdir", CMD_SINGLE, CMD_OPTIONAL,
"configuration directory");
cmd_AddParm(ts, "-logfile", CMD_SINGLE, CMD_OPTIONAL,
"make close calls synchronous");
cmd_AddParm(ts, "-shutdown", CMD_FLAG, CMD_OPTIONAL,
"Shutdown all afs state");
+ /* 21 - 30 */
cmd_AddParm(ts, "-enable_peer_stats", CMD_FLAG, CMD_OPTIONAL | CMD_HIDE,
"Collect rpc statistics by peer");
cmd_AddParm(ts, "-enable_process_stats", CMD_FLAG,
"Collect rpc statistics for this process");
cmd_AddParm(ts, "-mem_alloc_sleep", CMD_FLAG, (CMD_OPTIONAL | CMD_HIDE),
"Allow sleeps when allocating memory cache");
- cmd_AddParm(ts, "-afsdb", CMD_FLAG, (CMD_OPTIONAL
-#ifndef AFS_AFSDB_ENV
- | CMD_HIDE
-#endif
- ), "Enable AFSDB support");
+ cmd_AddParm(ts, "-afsdb", CMD_FLAG, (CMD_OPTIONAL),
+ "Enable AFSDB support");
cmd_AddParm(ts, "-files_per_subdir", CMD_SINGLE, CMD_OPTIONAL,
"log(2) of the number of cache files per cache subdirectory");
cmd_AddParm(ts, "-dynroot", CMD_FLAG, CMD_OPTIONAL,
cmd_AddParm(ts, "-nomount", CMD_FLAG, CMD_OPTIONAL, "Do not mount AFS");
cmd_AddParm(ts, "-backuptree", CMD_FLAG, CMD_OPTIONAL,
"Prefer backup volumes for mointpoints in backup volumes");
+ /* 31 - 40 */
cmd_AddParm(ts, "-rxbind", CMD_FLAG, CMD_OPTIONAL,
"Bind the Rx socket (one interface only)");
cmd_AddParm(ts, "-settime", CMD_FLAG, CMD_OPTIONAL, "set the time");
struct afssysargs syscall_data;
void *ioctldata;
int fd = open(SYSCALL_DEV_FNAME,O_RDWR);
- int syscallnum, is64 = 0;
+ int syscallnum;
#ifdef AFS_DARWIN100_ENV
+ int is64 = 0;
struct afssysargs64 syscall64_data;
if (sizeof(param1) == 8) {
syscallnum = VIOC_SYSCALL64;