338 lines
13 KiB
Plaintext
338 lines
13 KiB
Plaintext
|
This is a list of code "concerns". these have been removed from the code and
|
|||
|
placed here so that the code will not contain untoward comments.
|
|||
|
|
|||
|
rx\read.c and write.c
|
|||
|
tomm claims that the memory manager has been fixed before nt4.0 shipped
|
|||
|
so that it is no longer necessary to synchronize flushers by acquiring and
|
|||
|
releasing the pagingio resource. the is in the check for noncachedio when there
|
|||
|
is a private cachemap. we should make sure that everyone else removes their
|
|||
|
synchronization or we should put ours back.
|
|||
|
|
|||
|
rx\read.c and write.c
|
|||
|
the pipe read/write paths should be completely separated in the wrapper
|
|||
|
and the opportunity to do so should be presented in the mini.
|
|||
|
|
|||
|
rx\read.c
|
|||
|
there is a place where we set status pipe empty; at that point we should
|
|||
|
also backoff a la rdr1
|
|||
|
|
|||
|
rx\lock.c
|
|||
|
there should be backoff logic
|
|||
|
|
|||
|
rx\strtstop.c
|
|||
|
the call to rxforcenettablefinalization should be per-minirdr and should
|
|||
|
be moved out of the iftest.
|
|||
|
|
|||
|
rx\strtstop
|
|||
|
acquireing the netname table lock is was only required becauseof
|
|||
|
precious servers. now that that's gone. we should remove the lock. but, it's
|
|||
|
safe, of course.
|
|||
|
|
|||
|
mrx in general
|
|||
|
we should review the throttling constants....seem pretty conservative to
|
|||
|
me; we should consider being substantially more aggressive.
|
|||
|
|
|||
|
mrx
|
|||
|
we should have precious server code.
|
|||
|
|
|||
|
rx\lockctrl.c
|
|||
|
we should only allocate a lock structure if someone does a lock! same
|
|||
|
with the oplock structure. ntfs does this. obviously, we would have a change in
|
|||
|
fcb.h to go with this.
|
|||
|
|
|||
|
rx\lockctrl.c
|
|||
|
the last little bit of getting the refcounts right was to account for
|
|||
|
the fact that the fspdispatch does not remove a reference if pending is
|
|||
|
returned. this is probably wrong....and we should map over to a scheme where the
|
|||
|
fsd and fsp dispatches are the ones that do this instead of having every common
|
|||
|
routine do it. this would be a major change but it would really make things more
|
|||
|
consistent.
|
|||
|
|
|||
|
rx\lockctrl.c
|
|||
|
it is stupid that we will have to lookup the lock again if it fails
|
|||
|
(async completion path). we should ask for an fsrtl interface that removes a
|
|||
|
lock that i provide.
|
|||
|
|
|||
|
rx\create.c
|
|||
|
in RxCreateFromNetRoot, after the call to
|
|||
|
|
|||
|
rx\ntinit.c
|
|||
|
in RxGetRegistryParameters, we should allocate space for Storage
|
|||
|
instead. really what we should do is to implement and export a routine that both
|
|||
|
allocates and reads a string........for Ulong no allocation should be necessary
|
|||
|
|
|||
|
rx\ntfsp.c
|
|||
|
in fspdispatch and also addtoworkq, we use the wrapper's device object
|
|||
|
for throttling instead of the minirdr's device object. this will change.
|
|||
|
|
|||
|
rx\ntfsp.c
|
|||
|
in fspdispatch, if status_retry is returned then we will have already
|
|||
|
completed the packet.
|
|||
|
|
|||
|
rx\ntfsp.c
|
|||
|
prepostirp should be made pageable; also, i'm not too happy
|
|||
|
|
|||
|
rx\ntfsd.c
|
|||
|
initialization of prefixtable should be in RxInitializeDispatchVectors
|
|||
|
|
|||
|
rx\ntfsd.c
|
|||
|
RxFsdCommonDispatch in an excellent canididate for inlining
|
|||
|
|
|||
|
rx\ntfsd.c
|
|||
|
we shouldn't be checking everywhere for null dispatch points....rather
|
|||
|
we should fill them in with a good default
|
|||
|
|
|||
|
rx\ntfsd.c
|
|||
|
we should remove the async code from everywhere else and have it only in
|
|||
|
fsddispatch and fspdispatch. same with retry. this would get rid of the
|
|||
|
"should i remove a reference or not" decision.
|
|||
|
|
|||
|
rx\??
|
|||
|
the code that chains together pagingio reads should be removed
|
|||
|
|
|||
|
rx\ntfastio.c
|
|||
|
in fastiocheckifpossible...return the error directly. also, we should
|
|||
|
the cached netroottype as well as nodetype to determine if it's a
|
|||
|
diskfile. also in markoncleanup.
|
|||
|
|
|||
|
rx\ntexcept.c
|
|||
|
i removed this from the header
|
|||
|
|
|||
|
|
|||
|
Original Comments
|
|||
|
This routine process an exception. It either completes the request
|
|||
|
with the saved exception status or it sends it off to IoRaiseHardError()
|
|||
|
|
|||
|
My New Improved Version
|
|||
|
This routine processes an exception from the top level FSD routine. You can tell because it has
|
|||
|
an Irp w/o an RxContext. The original code did all kinds of stuff like raising hard errors and
|
|||
|
posting and such. My take is different...if you get here, things are hosed. So we either complete
|
|||
|
or we bugcheck. PERIOD. we can always be more liberal later...........
|
|||
|
|
|||
|
rx\ntfsd.c
|
|||
|
in RxDevFcbQueryDeviceInfo, the special handling for pipes should be
|
|||
|
removed.
|
|||
|
|
|||
|
rx\lockctrl.c
|
|||
|
don't allocate a lock structure unless you need one. also in fcb.h and
|
|||
|
fcbstruc.c
|
|||
|
|
|||
|
rx\lockctrl.c
|
|||
|
at rxunlock, we could be called from the cleanup routine on the last
|
|||
|
handle. in such a case, we should just swallow the unlocks. this might be a
|
|||
|
minirdr thing instead.
|
|||
|
|
|||
|
rx\fsctrl.c
|
|||
|
in RxLowIoFsCtlShell, we should have to switch out again. we should have
|
|||
|
handled the peeknamepipe throttling directly in the entry routine.
|
|||
|
|
|||
|
rx\flush.c
|
|||
|
maybe we should try to route for filetypes that we don't understand. or
|
|||
|
at least to have the minirdr signal that we should doit thru some stateful call.
|
|||
|
|
|||
|
rx\fileinfo.c
|
|||
|
i remove the following
|
|||
|
//CODE.IMPROVEMENT having a separate wrapper for every routine is stupid. we should (a) only
|
|||
|
// have it if we need it and (b) preinitialize the buffer and lengthremaining so we don't always
|
|||
|
// have to pass them.
|
|||
|
|
|||
|
[considering this we should fix the trace as well........]
|
|||
|
|
|||
|
and
|
|||
|
//CODE.IMPROVEMENT probably there's a better way than this to figure out whether
|
|||
|
// we need the resource at all or need it shared or need it excl.
|
|||
|
// for name, we don't need it at all since the name never changes
|
|||
|
|
|||
|
and from allinfo handling
|
|||
|
//CODE.IMPROVEMENT.ASHAMED either here or in the minirdr we should glob up call so that multiple trips
|
|||
|
// are not taken
|
|||
|
|
|||
|
rx\fileinfo.c
|
|||
|
you shouldn't do the fsrtloplock check for pipes. this keeps us from not
|
|||
|
allocating the struct
|
|||
|
|
|||
|
rx\fileinfo.c
|
|||
|
should we really change the name in the fcb after a rename. it
|
|||
|
complicates locking a bit for querys
|
|||
|
|
|||
|
rx\dirctrl.c
|
|||
|
no need to allocate templace buffer if it's small enough. most templates
|
|||
|
are probably less than 8.3 in size
|
|||
|
|
|||
|
rx\create.c
|
|||
|
the writeserialization field in the fobx is used by spoolfiles as well
|
|||
|
as pipes. maybe a name change to the specific field could reflect this dual
|
|||
|
usage.
|
|||
|
|
|||
|
rx\create.c
|
|||
|
perhaps we should wait to finalize on a failed open.
|
|||
|
|
|||
|
rx\create.c
|
|||
|
it would be good to "summarize" the fcb names that are logged
|
|||
|
|
|||
|
rx\create.c
|
|||
|
we should have a flag on fcb/netroot somewhere to denote that only
|
|||
|
32-bit operations are possible instead of having every mini have to check.
|
|||
|
|
|||
|
rxce\scavengr.c
|
|||
|
in scavenge-fobxs, starting at the beginning of the list each time is
|
|||
|
bad. what if there is some problem then we'd never get off the first guy.
|
|||
|
|
|||
|
rxce\prefix.c
|
|||
|
i removed this comment from the lookup
|
|||
|
// CODE.IMPROVEMENT we need code to lookup vnetroots MUCH faster....like a 26way cache........
|
|||
|
// failing that, we could at least not do the lookups (and hash computation)
|
|||
|
// until we're on the third component, i.e. \;m:\server\share. the cache is better.
|
|||
|
|
|||
|
rxce\fcbstruc.c
|
|||
|
in finishfcbinitialization, we should not initialize the lock structure
|
|||
|
for pipes. of course, we shouldn't even have a lock structure yet but that's a
|
|||
|
different c.i.
|
|||
|
|
|||
|
rxce\buffring.c
|
|||
|
i removed the following comment from RxChangeBufferingState
|
|||
|
//CODE.IMPROVEMENT we sure use up a lot of log entries in here! maybe we should put this state info
|
|||
|
// on the fcb.
|
|||
|
|
|||
|
BUGBUG
|
|||
|
|
|||
|
rxce\rxcontx.c
|
|||
|
the priority boost is set to disk....probably should be net. actually
|
|||
|
should be mini parameter.
|
|||
|
in the place where we check for advance-only on setfileinfo, we'd need a
|
|||
|
bit different for locals. there are a couple of places.
|
|||
|
|
|||
|
rxce\rxconnct.c
|
|||
|
i removed the following from RxConstructSrvCall
|
|||
|
//BUGBUG we should have some sort of refcount machanism to prevent a minirdr from
|
|||
|
// unregistering while he's part of a calldown
|
|||
|
//also, we shouldn't necessarily be calling down if this guy is not a UNC provider
|
|||
|
|
|||
|
rxce\fcbstruc.c
|
|||
|
in RxWaitForStableCondition, you need to be able to cancel.
|
|||
|
|
|||
|
rxce\fcbstruc.c
|
|||
|
in RxCreateNetRoot,
|
|||
|
//TRUE means case insensitive compares BUGBUG get this from srvcall
|
|||
|
|
|||
|
turns out, the whole issue of casing is incorrectly handled because
|
|||
|
there is no way to get casing handled on a per-call basis in case the
|
|||
|
casesensitive flag is set on open.
|
|||
|
|
|||
|
rxce\fcbstruc.c
|
|||
|
in RxCreateNetFcb,
|
|||
|
//BUGBUG: this should be on the fobx......not on the FCB. it should then be used correctly
|
|||
|
// in the querynameinfo code. same with stripped backslash
|
|||
|
the flag in question is RX_CONTEXT_CREATE_FLAG_ADDEDBACKSLASH.
|
|||
|
|
|||
|
rx\strtstop.c
|
|||
|
in RxStopMinirdr, the comment was removed from the following line
|
|||
|
RxTerminateScavenging(RxContext); //BUGBUG separate into the two parts and make the purge depend on the DObj
|
|||
|
|
|||
|
rx\lockctrl.c
|
|||
|
in RxUnlockOperation, the following comment was removed where we try to
|
|||
|
allocate
|
|||
|
//bugbug we cannot fail........i guess what we'd have to do is to send the unlock
|
|||
|
//from here!
|
|||
|
|
|||
|
rx\fileinfo.c
|
|||
|
in RxQueryStandardInfo, i removed this about the fact that links are
|
|||
|
returned incorrectly
|
|||
|
//BUGBUG there is a problem here with number of links...basically, the deal is that numberoflinks is
|
|||
|
//dynamic whereas everything else in the structure is knowable by the client side under oplock.
|
|||
|
|
|||
|
rx\create.c
|
|||
|
in , i removed this about downlevel canonicalization.
|
|||
|
DOWNLEVEL.BUGBUG we don't really do it yet but we do
|
|||
|
componentize and check for .. and .; for names that come down from win32
|
|||
|
this is fine.....for direct names going to downlevel servers we should do
|
|||
|
more checking maybe.
|
|||
|
|
|||
|
rx\create.c
|
|||
|
in RxCanonicalizeFileNameByServerSpecs, i removed the comment on this
|
|||
|
line both places
|
|||
|
&& RX2C_IS_DOT(Buffer[firstchar+2])) //??BUGBUG what about a alternate stream :.
|
|||
|
|
|||
|
rx\read.c
|
|||
|
need to implement a policy for controlling readahead differently for
|
|||
|
different customers
|
|||
|
|
|||
|
rx\dirctrl.c
|
|||
|
i removed this at the place when the uniarg template is comared
|
|||
|
// then match all names. joejoe....do i really need all this?? ntfs doesn't!
|
|||
|
|
|||
|
rx\create.c
|
|||
|
this from the header comments in RxCreateFromNetRoot:
|
|||
|
joejoe There is some possibility that we should just keep shared on the tablelock until we
|
|||
|
dispatch to the minirdr. That would save one release/acquire per open.
|
|||
|
|
|||
|
rx\cleanup.c
|
|||
|
removed the joejoe from this
|
|||
|
if (NeedDelete || NeedPurge) {
|
|||
|
//joejoe need to put in logic to keep a new read/write from
|
|||
|
//reinitializing
|
|||
|
RxDbgTrace(0, Dbg, ("CleanupPurge:MmFlushImage\n", 0));
|
|||
|
MmFlushImageSection(&capFcb->NonPaged->SectionObjectPointers,
|
|||
|
MmFlushForWrite);
|
|||
|
|
|||
|
rx\cleanup.c
|
|||
|
and from this.....
|
|||
|
KeQuerySystemTime( &CurrentTime );
|
|||
|
|
|||
|
//
|
|||
|
// Note that we HAVE to use BooleanFlagOn() here because
|
|||
|
// FO_FILE_SIZE_CHANGED > 0x80 (i.e., not in the first byte).
|
|||
|
//
|
|||
|
|
|||
|
//joejoe we need to probably do changetime independently
|
|||
|
//perhaps the smartest thing would just to put a basicinfo
|
|||
|
//struc in the fcb
|
|||
|
|
|||
|
rxce\rxconnct.c
|
|||
|
from RxConstructSrvCall, removed the joejoe
|
|||
|
//joejoe we should have a structure tag on this
|
|||
|
pSrvCalldownStructure = RxAllocatePoolWithTag(
|
|||
|
NonPagedPool,
|
|||
|
sizeof(MRX_SRVCALLDOWN_STRUCTURE) +
|
|||
|
(sizeof(MRX_SRVCALL_CALLBACK_CONTEXT) * NumberOfMinirdrs),
|
|||
|
'CSxR' );
|
|||
|
if (pSrvCalldownStructure == NULL) {
|
|||
|
ExReleaseFastMutexUnsafe(&RxData.MinirdrRegistrationMutex);
|
|||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
|||
|
}
|
|||
|
|
|||
|
rxce\fcbstruc.c
|
|||
|
from RxFinalizeSrvOpen, removed the joejoe remark
|
|||
|
if (ThisSrvOpen->Condition == Condition_Good) {
|
|||
|
RxPurgeChangeBufferingStateRequestsForSrvOpen(ThisSrvOpen);
|
|||
|
}
|
|||
|
|
|||
|
//joejoe we could put sme more asserts in here about empty srvfobxlist etc.
|
|||
|
|
|||
|
// close the file.
|
|||
|
MINIRDR_CALL_THROUGH(Status,Fcb->MRxDispatch,MRxForceClosed,((PMRX_SRV_OPEN)ThisSrvOpen));
|
|||
|
}
|
|||
|
|
|||
|
rxce\buffring.c
|
|||
|
from RxChangeBufferingState, removed joejoe
|
|||
|
MINIRDR_CALL_THROUGH(
|
|||
|
Status,
|
|||
|
Fcb->MRxDispatch,
|
|||
|
MRxCompleteBufferingStateChangeRequest,
|
|||
|
(RxContext,(PMRX_SRV_OPEN)SrvOpen,Context));
|
|||
|
}
|
|||
|
|
|||
|
//joejoe this could fail!!!! we should place the fcb into a
|
|||
|
// "failed oplock break" state.
|
|||
|
|
|||
|
RxDereferenceAndDeleteRxContext(RxContext);
|
|||
|
}
|
|||
|
|
|||
|
AND
|
|||
|
|
|||
|
} finally {
|
|||
|
ClearFlag(Fcb->FcbState,FCB_STATE_BUFFERSTATE_CHANGING); //this is informational for error recovery
|
|||
|
//joejoe there should be a callout here for a readpolicy...not vanilla..........
|
|||
|
}
|
|||
|
|
|||
|
|