From 31ea04b3b6dfbf328a6339fa792b9d6aae4ed82c Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 24 Jul 2008 20:33:53 +0000 Subject: [PATCH] DEVEL15-windows-buf-setdirty-20080724 LICENSE MIT Everytime the CM_BUF_DIRTY flag is set on a cm_buf_t, the userp field on the cm_buf_t must also be set. Add a cm_user_t parameter to buf_SetDirty() so that each function that calls it doesn't have to manually set the last write user. This improves code readability and the abstraction layering. (cherry picked from commit c10b26ca355e47bfb486de971ac275fb281461ca) --- src/WINNT/afsd/cm_buf.c | 10 +++++++++- src/WINNT/afsd/cm_buf.h | 2 +- src/WINNT/afsd/rawops.c | 10 +--------- src/WINNT/afsd/smb.c | 10 +--------- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index 2689a8e44..a305d12c2 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -1282,7 +1282,7 @@ void buf_CleanWait(cm_scache_t * scp, cm_buf_t *bp, afs_uint32 locked) * * The buffer must be locked before calling this routine. */ -void buf_SetDirty(cm_buf_t *bp, afs_uint32 offset, afs_uint32 length) +void buf_SetDirty(cm_buf_t *bp, afs_uint32 offset, afs_uint32 length, cm_user_t *userp) { osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); osi_assertx(bp->refCount > 0, "cm_buf_t refcount 0"); @@ -1341,6 +1341,14 @@ void buf_SetDirty(cm_buf_t *bp, afs_uint32 offset, afs_uint32 length) } lock_ReleaseWrite(&buf_globalLock); } + + /* and record the last writer */ + if (bp->userp != userp) { + cm_HoldUser(userp); + if (bp->userp) + cm_ReleaseUser(bp->userp); + bp->userp = userp; + } } /* clean all buffers, reset log pointers and invalidate all buffers. diff --git a/src/WINNT/afsd/cm_buf.h b/src/WINNT/afsd/cm_buf.h index 757d77dc1..752c4ce2c 100644 --- a/src/WINNT/afsd/cm_buf.h +++ b/src/WINNT/afsd/cm_buf.h @@ -166,7 +166,7 @@ extern long buf_CleanAsync(cm_buf_t *, cm_req_t *); extern void buf_CleanWait(cm_scache_t *, cm_buf_t *, afs_uint32 locked); -extern void buf_SetDirty(cm_buf_t *, afs_uint32 offset, afs_uint32 length); +extern void buf_SetDirty(cm_buf_t *, afs_uint32 offset, afs_uint32 length, cm_user_t *); extern long buf_CleanAndReset(void); diff --git a/src/WINNT/afsd/rawops.c b/src/WINNT/afsd/rawops.c index 73de291f1..0848621be 100644 --- a/src/WINNT/afsd/rawops.c +++ b/src/WINNT/afsd/rawops.c @@ -322,15 +322,7 @@ long WriteData(cm_scache_t *scp, osi_hyper_t offset, long count, char *op, /* now copy the data */ memcpy(bufferp->datap + bufIndex, op, nbytes); - buf_SetDirty(bufferp, bufIndex, nbytes); - - /* and record the last writer */ - if (bufferp->userp != userp) { - cm_HoldUser(userp); - if (bufferp->userp) - cm_ReleaseUser(bufferp->userp); - bufferp->userp = userp; - } + buf_SetDirty(bufferp, bufIndex, nbytes, userp); /* adjust counters, pointers, etc. */ op += nbytes; diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index a92fc24a0..193b0b43f 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -6787,15 +6787,7 @@ long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char /* now copy the data */ memcpy(bufferp->datap + bufIndex, op, nbytes); - buf_SetDirty(bufferp, bufIndex, nbytes); - - /* and record the last writer */ - if (bufferp->userp != userp) { - cm_HoldUser(userp); - if (bufferp->userp) - cm_ReleaseUser(bufferp->userp); - bufferp->userp = userp; - } + buf_SetDirty(bufferp, bufIndex, nbytes, userp); /* adjust counters, pointers, etc. */ op += nbytes; -- 2.39.5