From: Chas Williams Date: Tue, 5 Jan 2010 00:22:19 +0000 (+0000) Subject: rewrite afs_MemWriteBlk() using afs_MemWritevBlk() X-Git-Tag: openafs-devel-1_5_69~21 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=39b59269e5b7715c5a3017fb5e0a3e5222129ac5 rewrite afs_MemWriteBlk() using afs_MemWritevBlk() this avoids the code duplication of extending/shrinking cache entries Change-Id: Ieeae668caa506e934f92edf193b99dabdba2eabe Reviewed-on: http://gerrit.openafs.org/1062 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/afs/afs_memcache.c b/src/afs/afs_memcache.c index 65fc2bd..90e3f8f 100644 --- a/src/afs/afs_memcache.c +++ b/src/afs/afs_memcache.c @@ -169,42 +169,16 @@ afs_MemReadUIO(afs_dcache_id_t *ainode, struct uio *uioP) return code; } -/*XXX: this extends a block arbitrarily to support big directories */ int afs_MemWriteBlk(register struct osi_file *fP, int offset, void *src, int size) { register struct memCacheEntry *mceP = (struct memCacheEntry *)fP; - AFS_STATCNT(afs_MemWriteBlk); - ObtainWriteLock(&mceP->afs_memLock, 560); - if (size + offset > mceP->dataSize) { - char *oldData = mceP->data; + struct iovec tiov; - mceP->data = afs_osi_Alloc(size + offset); - if (mceP->data == NULL) { /* no available memory */ - mceP->data = oldData; /* revert back change that was made */ - ReleaseWriteLock(&mceP->afs_memLock); - afs_warn("afs: afs_MemWriteBlk mem alloc failure (%d bytes)\n", - size + offset); - return -ENOMEM; - } - - /* may overlap, but this is OK */ - AFS_GUNLOCK(); - memcpy(mceP->data, oldData, mceP->size); - AFS_GLOCK(); - afs_osi_Free(oldData, mceP->dataSize); - mceP->dataSize = size + offset; - } - AFS_GUNLOCK(); - if (mceP->size < offset) - memset(mceP->data + mceP->size, 0, offset - mceP->size); - memcpy(mceP->data + offset, src, size); - AFS_GLOCK(); - mceP->size = (size + offset < mceP->size) ? mceP->size : size + offset; - - ReleaseWriteLock(&mceP->afs_memLock); - return size; + tiov.iov_base = src; + tiov.iov_len = size; + return afs_MemWritevBlk(mceP, offset, &tiov, 1, size); } /*XXX: this extends a block arbitrarily to support big directories */