Andrew Deason [Thu, 24 Dec 2009 18:32:14 +0000 (13:32 -0500)]
Move TOP_INCDIR/des dependency to prelude
Make TOP_INCDIR/des a dependency of the 'prelude' target, not all of the
'dest'-ish targets. Without this, things like 'make tviced' fail since
we never create the TOP_INCDIR/des directory, but 'des' needs to copy
headers into there.
Also, remove the other redundant INCDIR/LIBDIR deps in the 'dest'-y
targets, and put them in 'prelude'.
Simon Wilkinson [Tue, 22 Dec 2009 21:46:43 +0000 (21:46 +0000)]
Solaris: Don't access lbolt directly
Recent changes in OpenSolaris have removed the 'lbolt' variable.
However, the ddi_get_lbolt accessor (which has been present since
Solaris 10) can be used to get access to the same value. So, use it.
Simon Wilkinson [Tue, 22 Dec 2009 21:42:19 +0000 (21:42 +0000)]
Solaris: Don't directly fiddle with the groups structure
Solaris doesn't let us directly play with the groups structure
anymore. Instead, there is a crsetgroups accessor which can be
used instead. So, use it.
Simon Wilkinson [Tue, 22 Dec 2009 21:38:00 +0000 (21:38 +0000)]
Solaris: Be more flexible about compilers
OpenSolaris doesn't have its C compiler in /opt/SUNWspro/bin/cc,
but we still have to be careful to avoid gcc, as that can't
build the kernel module.
As a short term stop gap, add a PATH_PROG test which looks in
both /opt/SUNWspro/bin and /opt/SunStudioExpress/bin for cc.
We probably should look in more places, and in the long run,
we should probably be taking whatever autoconf gives us
(for userspace, at least)
Simon Wilkinson [Tue, 22 Dec 2009 21:34:23 +0000 (21:34 +0000)]
Look for aclocal in more places
Some operating systems (cough, OpenSolaris, cough) have multiple
versions of aclocal installed, and don't populate the 'aclocal' name.
If 'aclocal' isn't present, then try using 'aclocal-1.10' before we give
up in disgust.
Andrew Deason [Tue, 22 Dec 2009 14:49:21 +0000 (09:49 -0500)]
Fix typo in afs_linux_cred_is_current
987816dfa852750caca8c64c44174a5333ae0e3b introduced a stray 'cred' in
one of the afs_linux_cred_is_current definitions. Remove it so we can
build without STRUCT_TASK_HAS_CRED.
Michael Meffie [Thu, 10 Dec 2009 16:37:34 +0000 (11:37 -0500)]
Consolidate duplicate definitions
Housekeeping change to consolidate some common definitions.
Create a new common header called afs_consts.h. This allows
us to remove the afscp.c dependency on afs.h (so src/tests
will build again.) Rename the max filename definition in the
update server package to MAXFNSIZE to avoid a name conflict
with MAXSIZE. The global defines will be prefixed with
AFS_ in a second patch.
Change-Id: I2b8d555a244cc92d889618de4eec4a99550d7c7f
Reviewed-on: http://gerrit.openafs.org/855 Reviewed-by: Mickey Lane <mlane@sinenomine.net> Tested-by: Mickey Lane <mlane@sinenomine.net> Reviewed-by: Derrick Brashear <shadow@dementia.org> Tested-by: Derrick Brashear <shadow@dementia.org>
Marc Dionne [Sun, 20 Dec 2009 03:22:05 +0000 (22:22 -0500)]
Linux: utsrelease.h is moving
In kernel 2.6.33, utsrelease.h has moved to include/generated.
Adapt the configure code to consider that location, and clean
up that section's indentation.
Simon Wilkinson [Sat, 19 Dec 2009 21:53:54 +0000 (21:53 +0000)]
Fix PAGs for all platforms without Linux keyrings
The changes in 7b272177de4c6f78db7f2315f4e30e85ab7660bb sadly break
all platforms which aren't Linux. This is because the logic in PagInCred
doesn't handle the non-Linux case at all. Fix this so that we call
afs_get_group_pag whenever we're not running on Linux.
The code also doesn't match the comment - Linux kernels which don't
have keyrings should use afs_get_group_pag(), regardless of whether
STRUCT_TASK_HAS_CRED. It's unlikely this bit would ever bite anyone
though, kernels with cred support almost certainly require keyrings.
Simon Wilkinson [Sat, 19 Dec 2009 20:21:36 +0000 (20:21 +0000)]
Linux: Simplify keyring compatibility code
This introduces a few inline functions in osi_compat.h, to reduce the
number of #ifdefs in the main chunk of code. In particular, we gain
* afs_linux_key_alloc : to handle all the different key_alloc
signatures
* afs_linux_search_keyring : to handle our two different mechanisms
for searching a keyring
* afs_linux_cred_is_current : will return true if we're using native
credentials, and the passed creds are also
those of the current task
Simon Wilkinson [Sat, 19 Dec 2009 15:40:49 +0000 (15:40 +0000)]
Linux: Don't panic when keys aren't found
This fixes two potential problems in our session keyring lookup code,
which can lead to panics in situations where we're using the new struct
cred based code.
The first is that if there is no session kerying installed for the
current task, we'll attempt to do a lookup on a NULL kerying and oops.
The second is that if the keyring_search returns EPERM, then we can end
up unmasking that error code, and return NULL, rather than an error.
Change-Id: If0e2804408ec17b00f352980cee6a8e56704d93f
Reviewed-on: http://gerrit.openafs.org/1004 Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com> Tested-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Simon Wilkinson [Sat, 19 Dec 2009 14:48:32 +0000 (14:48 +0000)]
Linux: Flush vcaches when a mount fails
GetVCache (well, really NewVCache) creates a new vcache, with an attached
inode, and links it into the VLRU queue, regardless of whether it is
successful in populating that vcache or not. The attached inode, on Linux,
contains a reference to the super block of the filesystem. If the created
vcache is for the root, however, and populating that vcache failes, then mount
fails, and the super block is disposed of. This leaves us with a vcache in
the VLRU queue which contains a reference to a non-existent inode.
When ShakeLooseVCaches comes along a few minutes later, it attempts to discard
this inode. However, doing so fails because the inode no longer has a valid
super block.
Avoid this trauma by ensuring all vcaches are disposed of before the super
block goes away, in the event of a mount failure.
Change-Id: I68864f1ea401d24adba76164905a17de6ab3e6ce
Reviewed-on: http://gerrit.openafs.org/1003 Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com> Tested-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Andrew Deason [Thu, 17 Dec 2009 20:59:44 +0000 (14:59 -0600)]
Do not trust FetchData length from fileservers
Currently the Unix CM implicitly trusts that the length from a FetchData
request from a fileserver will always be less than the requested length.
If the fileserver sends more data than requested, we can use up more
cache space than we intended, possibly exceeding the cacheinfo cache
limits.
Add a check for this, and return EIO to the caller if the fileserver
responds with too much data.
Andrew Deason [Fri, 18 Dec 2009 18:21:35 +0000 (12:21 -0600)]
platform target depends on cmd and vol
The 'platform' target depends on cmd and vol, since on solaris
non-namei, we build fs_conv_sol26.c, which depends on some volume
structures, and uses libcmd. So, have Makefile.in accurately reflect
that dependency so we can build.
Andrew Deason [Fri, 16 Oct 2009 22:12:35 +0000 (17:12 -0500)]
Add the 'vos endtrans' command
Add a command to vos to explicitly end volume transactions. These can
happen if (for example) we segfault or the user ctrl-C's in 'vos'
before/after a volume operation, but before we AFSVolEndTrans.
Andrew Deason [Fri, 6 Nov 2009 20:03:52 +0000 (14:03 -0600)]
Expand ProgramType enumeration
The ProgramType values volumeUtility and salvager are overloaded. Expand
the ProgramType enum to include more specific program types, and adjust
conditionals to match.
Also, instead of determining all behavior by checking programType, add
some flags to be passed in to VInitVolumePackage to determine e.g.
whether or not we can use the FSSYNC channel. This makes it easier to
see the intent of some conditionals, and reduces the number of times a
caller must lie about what program it is.
Simon Wilkinson [Fri, 20 Nov 2009 15:08:25 +0000 (15:08 +0000)]
Linux: Use splice to speed up cache storeback
This patch adds a new cache store function for Linux, which uses
splice() and direct access to the page cache, rather than doing
data copies to a temporary buffer between rx and afs. It removes
one copy, and some context switching, from the write codepath.
One side-effect here is that it will delay storebehinds from
returning control to the user. Instead of returning once the first
4k has been successfully transfered, we will wait until a cache
chunk has been transmitted. This is currently unavoidable, as we
can't take the GLOCK within a splice actor.
Simon Wilkinson [Fri, 20 Nov 2009 15:03:37 +0000 (15:03 +0000)]
Rework cache store back
This patch reworks the code to store data from the cache to the server,
such that the entire store loop can be replaced. The idea here is that a
platform which wishes to provide a different store loop, in particular
one which doesn't rely upon multiple data copies, may do so simply by
plugging in a new function.
Marc Dionne [Thu, 10 Dec 2009 00:06:18 +0000 (19:06 -0500)]
Linux: deal with ctl_name removal
The binary sysctl interface will be removed in kernel 2.6.33 and
ctl_name will be dropped from the ctl_table structure.
Make the code that uses ctl_name conditional on a configure test.
Jeffrey Altman [Sat, 5 Dec 2009 15:51:27 +0000 (10:51 -0500)]
Windows: cm_BPlusEnumAlloc should not fail for zero entries
If cm_BPlusEnumAlloc returns NULL, the caller assumes a
memory allocation error. If the enumeration consists of
zero entries, allocate a structure that stores zero entries.
Jeffrey Altman [Sat, 5 Dec 2009 15:53:03 +0000 (10:53 -0500)]
Windows: cm_BPlusDirBuildTree can fail
It is possible that cm_BPlusDirBuildTree can fail. For example,
the server could be marked down after a callback is obtained
but before all of the directory data buffers have been fetched.
cm_BeginDirOp must check for the failure, destroy the tree,
and return the failure code to the caller. Otherwise, a tree
with no entries may be created and marked with the current
data version.
Andrew Deason [Sun, 6 Dec 2009 20:56:20 +0000 (14:56 -0600)]
Make HandleClientContext take an afs_ucred_t
5d5d18071608d9782a5d936f79215048af641410 missed one occurrence of
AFS_UCRED. Make HandleClientContext take an afs_ucred_t instead of
AFS_UCRED, so afs_pioctl.c builds again.
Simon Wilkinson [Sun, 6 Dec 2009 14:25:08 +0000 (14:25 +0000)]
Remove AFS_USEBUFFERS
The AFS_USEBUFFERS code has been disabled for all supported platforms
since the initial OpenAFS code drop. Simplify the buffers code by
removing it entirely.
Change-Id: Iab6b2d54361eca1a1446b4804b3d6533d75f2831
Reviewed-on: http://gerrit.openafs.org/894 Reviewed-by: Andrew Deason <adeason@sinenomine.net> Tested-by: Andrew Deason <adeason@sinenomine.net> Reviewed-by: Derrick Brashear <shadow@dementia.org>
revised version of a patch i've had for months to actually be clean.
allow state of all packets to be dumped so you can see what's on what
queues where.
Rainer Toebbicke [Thu, 19 Nov 2009 13:07:07 +0000 (14:07 +0100)]
Calculate midnight (for volume stats) based on standard functions
The "tz" structure used with gettimeofday is not blessed by common
standards and not widely supported, on Solaris for example it does not
return anything useful.
Calculate midnight based on standard functions (localtime/mktime).
Jeffrey Altman [Mon, 17 Aug 2009 16:30:44 +0000 (12:30 -0400)]
Use xdr_alloc and xdr_free within ptuser
If the memory allocation routines for libafsauthent and libafsrpc
differ, callers of the ptuser routines in libafsauthent will crash.
Use xdr_alloc and xdr_free in ptuser to ensure that the memory
allocation routines are always consistent.
Andrew Deason [Mon, 26 Oct 2009 19:09:41 +0000 (14:09 -0500)]
Correct duplicate special inodes while salvaging
Right now when the salvager encounters duplicate special inodes for a
volume, it refuses to salvage the volume, presumably because it does not
know which inodes to use when recreating the volume header.
However, this can cause the confusing state where the fileserver and
various volume utilities have no problem with a volume, but the salvager
refuses to salvage it and marks the volume as needing salvage. When
salvaging, if we already have a volume header, and we encounter
duplicate special inodes, it is likely that the special inode referenced
by the volume header is the correct one.
So, instead of erroring out, keep track of which inodes are referenced
in the volume header, and if there are any duplicates, either ignore or
delete the unreferenced ones, depending on the -orphans setting. Also be
a little more verbose when logging errors in this area.
Change-Id: I15e34e8f2bccdc666bb59e3730fdf8bf51624259
Reviewed-on: http://gerrit.openafs.org/736 Tested-by: Andrew Deason <adeason@sinenomine.net> Reviewed-by: Alistair Ferguson <alistair.ferguson@mac.com> Reviewed-by: Steve Simmons <scs@umich.edu> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Marc Dionne [Thu, 19 Nov 2009 23:29:08 +0000 (18:29 -0500)]
Warning fixes - key handling
Various warning fixes related mostly to the different types used
to handle keys. This should clear most of the remaining warnings
in this area. The technique of inline converter helpers is
extended to cover a few more cases.
README.WARNINGS is adjusted to reflect the current status.
Fixes:
- bos: define and use an inline converter from a ktc key to a bozo key
- bos.c and bos_utils.c should no longer have warnings - adjust Makefile
- define a ktc key to char * converter and use it in a few places
- define kas key to bozo key ptr converter and use it in a few places (afs_bosAdmin)
- cast a few arguments to ka_StringToKey which expects non-const pointers
Change-Id: I1c19869ac232d78209126d4eeeb11af8bcb95815
Reviewed-on: http://gerrit.openafs.org/860 Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Reviewed-by: Derrick Brashear <shadow@dementia.org> Tested-by: Derrick Brashear <shadow@dementia.org>
Andrew Deason [Sun, 29 Nov 2009 03:25:27 +0000 (22:25 -0500)]
Add server prefix to utst_int.xg
When compiling src/ubik/utst_int.ss.c, a warning would be produced since
the server stubs are defined as accepting an rx_connection instead of an
rx_call, and since the server and client RPC stubs have the same name.
Give a server prefix so we can distinguish between the two, and fix the
server stubs and squash the warning, similar to bd011aeee7f5dad5c61fd81a90b296c46a0b9058.
Andrew Deason [Fri, 20 Nov 2009 20:15:28 +0000 (14:15 -0600)]
Add safety checks on all hostList traversals
Currently, h_Enumerate checks that it doesn't enumerate over more than
hostCount hosts, in case the hostList has a cycle or is otherwise
corrupt. Add similar checks to all places in the code that loop over
hostList, to prevent the code from getting in an infinite loop under
H_LOCK in the case of a hostList cycle.
Also, ShutDownAndCore instead of assert'ing, so we try and detach
volumes first, possibly reducing salvaging time when we restart after
core'ing.
Jeffrey Altman [Tue, 24 Nov 2009 23:08:55 +0000 (18:08 -0500)]
Windows: Fix test for setting FILE_ATTR_READONLY
When checking whether or not to enforce the unix mode
bits as if they were the Windows FILE_ATTR_READONLY flag
the mask 0200 is used. Make sure that the same mask is
used when publishing the FILE_ATTR_READONLY flag to the
smb client.
Jeffrey Altman [Thu, 19 Nov 2009 23:53:56 +0000 (18:53 -0500)]
Windows: disable readonly volume versioning due to file server bug
Change I17e3980184ec68e38c5186e1c9637ac6e38451fe corrects a file
server bug that results in invalid volume sync data being sent
to clients during bulk status rpcs. Unless this is fixed in the
file servers it is not safe to use the volume versioning functionality.
This patchset disables the functionality by default and permits
it to be turned on via a registry value. If the client is deployed
in an environment in which all of the file servers have been fixed,
then it will be safe to turn this feature on.
Jeffrey Altman [Thu, 19 Nov 2009 23:21:39 +0000 (18:21 -0500)]
Windows: cm_TryBulkStatus processing changes
move the logging of success or failure in order to
try to avoid the VS8 compiler optimizing them out.
merge the bulk status information if the current
cm_scache_t object is flagged with an access denied
failure on the last request or if it is a readonly
volume. This permits us to return something valid
to the directory enumeration that generated the
cm_TryBulkStatus call.
Jeffrey Altman [Thu, 19 Nov 2009 19:18:18 +0000 (14:18 -0500)]
Windows: modify src/rxkad/NTMakefile to avoid file copies
Permit src/rxkad/domestic/* files to be compiled / installed
in place. This permits the tree to build after the
application of change I0796fabcf83ffcd74e533624c64e138a160dd632.
Jeffrey Altman [Thu, 19 Nov 2009 23:11:06 +0000 (18:11 -0500)]
viced: set volume sync data in bulk status rpcs
The bulkstatus and inlinebulkstatus rpcs have a bug
that prevents the volume sync data from being set.
Currently the data is being set within the for loop
only when i == nfiles. The conditional of the loop
is i < nfiles so the SetVolumeSync call is never
performed. This patch changes the test for performing
SetVolumeSync to i == 0.
Marc Dionne [Sun, 25 Oct 2009 02:10:46 +0000 (22:10 -0400)]
Linux: Keyrings PAG handling changes
We can take advantage of the fact that PagInCred now receives
a kernel credentials structure as an argument (including any session
keyring) to make some improvements in the handling of PAGs
when keyrings are in use.
These changes are effective only if keyrings are in use and we
have a recent enough kernel where we can use the kernel
credentials structure.
1 - Search the session keyring of the passed credentials instead of
the current process' to determine the PAG, if any. This was always
not really correct, and now we're able to do the right thing.
In some situations such as background writeback and pre-fetching,
this means that we'll now do it with the right credentials, even when
in a PAG.
2 - Don't use groups at all to determine PAG membership. Doing so
can lead to some inconsistent situations such as the one described
in RT 125198, where a process gets access through a soon to be
deleted PAG. Make PagInCred look exclusively at the keyrings.
Groups are still updated to try to reflect the current PAG for now,
if the passed credentials belong to the current process.
Note that a process can no longer get a PAG's privileges simply by
adding the corresponding groups to its group list.
Marc Dionne [Sun, 22 Nov 2009 19:17:19 +0000 (14:17 -0500)]
Remove "unused" warnings from lex generated files
Some (f)lex generated source files produce warnings because of unused
labels or variables.
Since there is limited control of the source itself, just be more
permissive in this particular case with -Wno-unused.
UFSOpen shares a prototype with MemCacheOpen because of the
afs_cacheOps structure. This is why a void * is used.
Revert until a more complete fix can be submitted that adresses
the memcache case as well.
Simon Wilkinson [Wed, 18 Nov 2009 20:07:04 +0000 (20:07 +0000)]
Remove inode hinting for dcaches
The VNOP read code has always contained incomplete support for inode
hinting. In theory this would let us attach open cache files to dcache
structures, so that we don't have the overhead of opening the file
with every read that we do.
However, this has been ifdef'd off ever since the first release, and
is fundamentally broken - it relied upon structure elements that just
don't exist, and has no mechanism for throttling the number of inode
hints that are maintained. Inode hinting also required that we store
an inode number within the osi_file structure (so hint validity could
be checked), which causes a problem on some modern OS's.
Simplify all of this, by just removing the partial hinting support.
If we want to revisit this in the future, then the code is in git,
but if we _do_ feel we want to keep open cache files around, it's
probably better to start from scratch!
Simon Wilkinson [Mon, 26 Oct 2009 19:58:53 +0000 (19:58 +0000)]
Fix prepare and commit_write to do the right thing
Even when we're doing syncronous writeback, as we currently do
for write() operations, it's important to correctly fill, and flag
the pages we're writing to. Not doing so has a huge performance
penalty, as it means even when we've just written a page, we have to
pull it back from the backing store for a read.
This code fixes prepare_write and commit_write (for RHEL5) and
write_begin and write_end (for Fedora) to correctly populate and
flag pages which are being written.
Simon Wilkinson [Sat, 24 Oct 2009 14:08:52 +0000 (15:08 +0100)]
Linux: Use atomics for credential reference counts
The reference count maintained as part of the afs_cred structure
wasn't being maintained atomically, requiring that crfree and
crhold always be called with the GLOCK held.
This patch just switches to using Linux's inbuilt atomic types to
maintain the reference count.
Andrew Deason [Wed, 18 Nov 2009 21:43:17 +0000 (15:43 -0600)]
Define WCOREDUMP in salvsync-server.c
Some platforms do not define WCOREDUMP. Conditionally define WCOREDUMP
in salvsync-server.c, and make all of the similar WCOREDUMP defines in
the tree consistent.
Change-Id: I197979881ade20f6e790bf41523938089379dbe3
Reviewed-on: http://gerrit.openafs.org/846 Reviewed-by: Russ Allbery <rra@stanford.edu> Reviewed-by: Tom Keiser <tkeiser@sinenomine.net> Reviewed-by: Derrick Brashear <shadow@dementia.org> Tested-by: Derrick Brashear <shadow@dementia.org>
Mickey Lane [Wed, 18 Nov 2009 17:23:15 +0000 (12:23 -0500)]
Fix 2 errors in Windows release Notes
Description of registry key HKLM\ SOFTWARE\ OpenAFS\
Client\ Server Preferences\ File (and \ VLDB) states
"256" - should be 15 - and "ServerPreferences" should
have a space between the words.
Jeffrey Altman [Fri, 13 Nov 2009 18:56:20 +0000 (13:56 -0500)]
Windows: cm_BkgDaemon requeuing only applies to BkgStore
cm_BkgDaemon currently requeues failed requests for a variety
of errors. It only applies to cm_BkgStore requests. The current
code only supports cm_BkgStore and cm_BkgPrefetch operations.
Additional background operations may be added in the future.
If requeues are meant to apply to the new operations, they should
be explicitly specified. Specify cm_BkgStore explicitly now.
Jeffrey Altman [Sat, 14 Nov 2009 21:33:31 +0000 (16:33 -0500)]
Windows: Improvements to background fetch processing
Log offset and length in cm_BkgPrefetch()
Convert mxheld to rwheld in cm_BkgPrefetch() now that cm_scache_t
objects use rwlocks.
Do not clear CM_SCACHEFLAG_PREFETCHING from within the error
returns from cm_CheckFetchRange(). Let the caller decide if
that is appropriate.
Add CM_BUF_CMBKGFETCH cm_buf_t cmFlag to make it possible to
quickly detect if a background fetch operation has already
been queued for a particular cm_buf_t data range.
Andrew Deason [Wed, 18 Nov 2009 20:08:49 +0000 (14:08 -0600)]
Define T_SRV when not defined for us
Define T_SRV when we don't have a usable arpa/nameser_compat.h, just
like we do with T_AFSDB. Some platforms like AIX do not have an
easily-usable arpa/nameser_compat.h.
Make ihandle file descriptor cache parameters tunable, and accommodate
platforms where max open files is large. Expand the fd cache hash table
to 2048 entries. Raise fd cache size automatically to match configured
number of lwps.
NOTE: This code has been tested on Centos 5.3 x86_64, on VMWare, 2 physical,
2 logical CPUs (in tandem with viced_more_threads).
Simon Wilkinson [Fri, 13 Nov 2009 09:50:29 +0000 (09:50 +0000)]
Rationalise our include paths
Our include paths are a bit of a mess. Fix these so that they're
more rational, and more in line with normal coding style.
In particular:
*) Don't include all of the subdirectories of our top level
include directory. If a file wants afs/file.h, it should
include that, not "file.h"
*) Try to avoid including '.' in the search path (although
objdir builds make this harder)
*) Don't blindly include other directories from the code tree
in the search path. If a package wants another packages header,
then it should get it from the include directory
*) Use the convention that quoted includes ("") pick up local
headers. Bracketed includes (<>) pick up ones from the top level
include dir
*) In directories which pull in files from multiple packages, don't
blindly put all of the package directories in the search path.
Specifically include the file's package directory when required
The big change here is that it's no longer possible to hide a system
include by placing a header of the same name in include/afs. The most
common case where this was happening was for 'assert.h'
Simon Wilkinson [Fri, 13 Nov 2009 16:33:52 +0000 (16:33 +0000)]
Better errors from aklog
Since the great com_err fracture, aklog has only returned decent
error messages from AFS, leaving Kerberos errors untranslated.
Needless to say, this causes user confusion and distress.
This patch uses the error display proc hook to call out to the real
com_err in situations where AFS can't supply an error message, giving
clearer errors for Kerberos problems.
Jeffrey Altman [Sat, 14 Nov 2009 21:27:37 +0000 (16:27 -0500)]
Windows: Error mapping for VBUSY and VRESTARTING
Add error mapping for VBUSY and VRESTARTING to
cm_MapRPCError(). Return CM_ERROR_ALLBUSY.
This prevents an unknown error from being returned
to the SMB redirector.
Jeffrey Altman [Sat, 31 Oct 2009 14:33:00 +0000 (10:33 -0400)]
Windows: Use STATUS_IO_TIMEOUT where STATUS_TIMEOUT was returned
STATUS_TIMEOUT causes the smb redirector to drop the connection.
STATUS_RETRY is interpreted by the smb redirector as if the error was
generated by the transport stack and not the smb server.
STATUS_IO_TIMEOUT is listed in the SNIA CIFS 1.0 spec as a valid
return code for the smb server. Lets us that.
Jeffrey Altman [Sun, 15 Nov 2009 06:01:23 +0000 (01:01 -0500)]
Windows: Fix port assignment to use network byte order
Service port numbers are stored within sockaddr* structures
and returned by afsconf_FindService() in network byte order.
getAFSServer() and afsconf_GetAfsdbInfo() accept and return
service port numbers in network byte order.
When processing the special case for 7002 and 7003 in
afsconf_GetAfsdbInfo(), the comparisons must consistently
use network byte order.
When assigning port numbers for AFSDB lookups, getAFSServer()
must use network byte order.
Document the use of network byte order for each variable.
Andrew Deason [Wed, 11 Nov 2009 17:23:49 +0000 (11:23 -0600)]
Make ktc_curpag also detect ONEGROUP PAG gids
ktc_curpag falls back to looking at the group list if the VIOC_GETPAG
pioctl fails. If we're in AFS_LINUX26_ONEGROUP_ENV in the kernel,
though, ktc_curpag still looks for two groups, instead of the one
combined group. Add a check for the big one group in the fallback if
we're on LINUX26.
Change-Id: I28e5eda5c62f13a6fb466c8a2b04d2628706498f
Reviewed-on: http://gerrit.openafs.org/815 Tested-by: Andrew Deason <adeason@sinenomine.net> Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Simon Wilkinson [Wed, 21 Oct 2009 22:17:15 +0000 (23:17 +0100)]
Use set_page_writeback and end_page_writeback
Calling set_page_writeback and end_page_writeback is necessary to
ensure that the dirty page radix tree and the page dirty flags
tally. The results of end_page_writeback are also used by the
bdi code to prioritise writeback. The Linux kernel
documentation contains further warnings of doom for what may
happen due to not calling them.
Adding set_page_writeback and end_page_writeback also allows us to
unlock the page earlier (the page can be locked any time after the
writeback flag is set). This means that we're not calling the
backing filesystem's ->write function with our pages locked, and
should help reduce contention and the potential for deadlocks there.
Change-Id: I9130b2ad9a09c6b9b16a0f63d7b4a614a93de8d3
Reviewed-on: http://gerrit.openafs.org/819 Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com> Tested-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Marc Dionne [Thu, 29 Oct 2009 23:58:00 +0000 (19:58 -0400)]
Linux: Use the kernel's credentials structure
Recent kernels (2.6.29 and above) have a separate ref-counted
structure for holding credentials. Use it directly instead of
keeping a separate afs specific structure that shadows the same
information.
Also adapt Linux for the change from cr_xxx to afs_cr_xxx wrappers.
Reference counting is done with the appropriate get/put calls.
Andrew Deason [Wed, 11 Nov 2009 16:51:19 +0000 (10:51 -0600)]
Do not check *aoutSize in PGetPAG
*aoutSize is always zero in pioctls, since afs_HandlePioctl handles
checking the output buffer size, and sets outSize to 0 before calling
the pioctl. So, PGetPAG was always returning E2BIG; remove the check to
make it work.
Simon Wilkinson [Wed, 11 Nov 2009 10:34:30 +0000 (10:34 +0000)]
Update warning inhibition
A number of recent changes haven't caught all of the locations where
warning inhibition can be removed. This patch updates all of the
inhibitions to reflect the current state of the tree when built with
gcc4.2
Simon Wilkinson [Wed, 11 Nov 2009 10:28:29 +0000 (10:28 +0000)]
const char paths for ubik_ServerInit
ubik_ServerInit* take a pathname, which should really be a const.
It already is in many of the callers, some of which remove the
const by casting, the others throw errors.
Make pathName const for all of ubik_ServerInitByInfo, ubik_ServerInit
and ubik_ServerInitCommon.
Update all of our callers to remove the now unecessary casting.
Remove the now uneccessary warning inhibition on vlserver/vlserver.c