[AFD] Introduce and use pool tags. Thanks go to Arty for assisting me with this....
[reactos.git] / drivers / network / afd / afd / read.c
index 090aed0..b0ff01a 100644 (file)
@@ -7,6 +7,7 @@
  * UPDATE HISTORY:
  * 20040708 Created
  */
+
 #include "afd.h"
 
 static VOID RefillSocketBuffer( PAFD_FCB FCB )
@@ -45,7 +46,6 @@ static VOID RefillSocketBuffer( PAFD_FCB FCB )
                 TDI_RECEIVE_NORMAL,
                 FCB->Recv.Window + FCB->Recv.Content,
                 FCB->Recv.Size - FCB->Recv.Content,
-                &FCB->ReceiveIrp.Iosb,
                 ReceiveComplete,
                 FCB );
 }
@@ -101,15 +101,14 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
     *TotalBytesCopied = 0;
 
 
-    AFD_DbgPrint(MID_TRACE,("Called, BytesAvailable = %d\n",
-                            BytesAvailable));
+    AFD_DbgPrint(MID_TRACE,("Called, BytesAvailable = %u\n", BytesAvailable));
 
     if( CantReadMore(FCB) ) return STATUS_SUCCESS;
     if( !BytesAvailable ) return STATUS_PENDING;
 
     Map = (PAFD_MAPBUF)(RecvReq->BufferArray + RecvReq->BufferCount);
 
-    AFD_DbgPrint(MID_TRACE,("Buffer Count: %d @ %x\n",
+    AFD_DbgPrint(MID_TRACE,("Buffer Count: %u @ %p\n",
                             RecvReq->BufferCount,
                             RecvReq->BufferArray));
     for( i = 0;
@@ -123,7 +122,7 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
         if( Map[i].Mdl ) {
             Map[i].BufferAddress = MmMapLockedPages( Map[i].Mdl, KernelMode );
 
-            AFD_DbgPrint(MID_TRACE,("Buffer %d: %x:%d\n",
+            AFD_DbgPrint(MID_TRACE,("Buffer %u: %p:%u\n",
                                     i,
                                     Map[i].BufferAddress,
                                     BytesToCopy));
@@ -154,12 +153,12 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
     PIRP NextIrp;
     PIO_STACK_LOCATION NextIrpSp;
     PAFD_RECV_INFO RecvReq;
-    UINT TotalBytesCopied = 0, RetBytesCopied = 0;
+    UINT TotalBytesCopied = 0;
     NTSTATUS Status = STATUS_SUCCESS, RetStatus = STATUS_PENDING;
 
-    AFD_DbgPrint(MID_TRACE,("%x %x\n", FCB, Irp));
+    AFD_DbgPrint(MID_TRACE,("%p %p\n", FCB, Irp));
 
-    AFD_DbgPrint(MID_TRACE,("FCB %x Receive data waiting %d\n",
+    AFD_DbgPrint(MID_TRACE,("FCB %p Receive data waiting %u\n",
                             FCB, FCB->Recv.Content));
 
     if( CantReadMore( FCB ) ) {
@@ -172,7 +171,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
             NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp );
             RecvReq = GetLockedData(NextIrp, NextIrpSp);
 
-            AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp,
+            AFD_DbgPrint(MID_TRACE,("Completing recv %p (%u)\n", NextIrp,
                                     TotalBytesCopied));
             UnlockBuffers( RecvReq->BufferArray,
                            RecvReq->BufferCount, FALSE );
@@ -183,7 +182,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
             }
             else
             {
-                /* Unexpected disconnect by the remote host or initial read after a graceful disconnnect */
+                /* Unexpected disconnect by the remote host or initial read after a graceful disconnect */
                 Status = FCB->LastReceiveStatus;
             }
             NextIrp->IoStatus.Status = Status;
@@ -198,7 +197,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
         /* Kick the user that receive would be possible now */
         /* XXX Not implemented yet */
 
-        AFD_DbgPrint(MID_TRACE,("FCB %x Receive data waiting %d\n",
+        AFD_DbgPrint(MID_TRACE,("FCB %p Receive data waiting %u\n",
                                 FCB, FCB->Recv.Content));
         /*OskitDumpBuffer( FCB->Recv.Window, FCB->Recv.Content );*/
 
@@ -209,18 +208,18 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
             NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp );
             RecvReq = GetLockedData(NextIrp, NextIrpSp);
 
-            AFD_DbgPrint(MID_TRACE,("RecvReq @ %x\n", RecvReq));
+            AFD_DbgPrint(MID_TRACE,("RecvReq @ %p\n", RecvReq));
 
             Status = TryToSatisfyRecvRequestFromBuffer
             ( FCB, RecvReq, &TotalBytesCopied );
 
             if( Status == STATUS_PENDING ) {
-                AFD_DbgPrint(MID_TRACE,("Ran out of data for %x\n", NextIrp));
+                AFD_DbgPrint(MID_TRACE,("Ran out of data for %p\n", NextIrp));
                 InsertHeadList(&FCB->PendingIrpList[FUNCTION_RECV],
                                &NextIrp->Tail.Overlay.ListEntry);
                 break;
             } else {
-                AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp,
+                AFD_DbgPrint(MID_TRACE,("Completing recv %p (%u)\n", NextIrp,
                                         TotalBytesCopied));
                 UnlockBuffers( RecvReq->BufferArray,
                                RecvReq->BufferCount, FALSE );
@@ -228,7 +227,6 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
                 NextIrp->IoStatus.Information = TotalBytesCopied;
                 if( NextIrp == Irp ) {
                     RetStatus = Status;
-                    RetBytesCopied = TotalBytesCopied;
                 }
                 if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
                 (void)IoSetCancelRoutine(NextIrp, NULL);
@@ -263,13 +261,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
         PollReeval(FCB->DeviceExt, FCB->FileObject);
     }
 
-    AFD_DbgPrint(MID_TRACE,("RetStatus for irp %x is %x\n", Irp, RetStatus));
-
-    /* Sometimes we're called with a NULL Irp */
-    if( Irp ) {
-        Irp->IoStatus.Status = RetStatus;
-        Irp->IoStatus.Information = RetBytesCopied;
-    }
+    AFD_DbgPrint(MID_TRACE,("RetStatus for irp %p is %x\n", Irp, RetStatus));
 
     return RetStatus;
 }
@@ -284,6 +276,8 @@ NTSTATUS NTAPI ReceiveComplete
     PAFD_RECV_INFO RecvReq;
     PIO_STACK_LOCATION NextIrpSp;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     AFD_DbgPrint(MID_TRACE,("Called\n"));
 
     if( !SocketAcquireStateLock( FCB ) )
@@ -341,7 +335,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
 
     BytesToCopy = MIN( RecvReq->BufferArray[0].len, BytesAvailable );
 
-    AFD_DbgPrint(MID_TRACE,("BytesToCopy: %d len %d\n", BytesToCopy,
+    AFD_DbgPrint(MID_TRACE,("BytesToCopy: %u len %u\n", BytesToCopy,
                             RecvReq->BufferArray[0].len));
 
     if( Map[0].Mdl ) {
@@ -362,7 +356,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
                           sizeof(USHORT),
                           RecvReq->BufferArray[1].len);
 
-            AFD_DbgPrint(MID_TRACE,("Copying %d bytes of address\n", AddrLen));
+            AFD_DbgPrint(MID_TRACE,("Copying %u bytes of address\n", AddrLen));
 
             Map[1].BufferAddress = MmMapLockedPages( Map[1].Mdl, KernelMode );
 
@@ -385,7 +379,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
 
         Map[0].BufferAddress = MmMapLockedPages( Map[0].Mdl, KernelMode );
 
-        AFD_DbgPrint(MID_TRACE,("Buffer %d: %x:%d\n",
+        AFD_DbgPrint(MID_TRACE,("Buffer %d: %p:%u\n",
                                 0,
                                 Map[0].BufferAddress,
                                 BytesToCopy));
@@ -415,8 +409,8 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
     if (!(RecvReq->TdiFlags & TDI_RECEIVE_PEEK))
     {
         FCB->Recv.Content -= DatagramRecv->Len;
-        ExFreePool( DatagramRecv->Address );
-        ExFreePool( DatagramRecv );
+        ExFreePoolWithTag(DatagramRecv->Address, TAG_AFD_TRANSPORT_ADDRESS);
+        ExFreePoolWithTag(DatagramRecv, TAG_AFD_STORED_DATAGRAM);
     }
 
     AFD_DbgPrint(MID_TRACE,("Done\n"));
@@ -436,7 +430,10 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PLIST_ENTRY ListEntry;
     KPROCESSOR_MODE LockMode;
 
-    AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Short);
+
+    AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
 
     if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
 
@@ -558,7 +555,9 @@ PacketSocketRecvComplete(
     UINT DGSize = Irp->IoStatus.Information + sizeof( AFD_STORED_DATAGRAM );
     PLIST_ENTRY NextIrpEntry, DatagramRecvEntry;
 
-    AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
 
     if( !SocketAcquireStateLock( FCB ) )
         return STATUS_FILE_CLOSED;
@@ -585,8 +584,8 @@ PacketSocketRecvComplete(
         while( !IsListEmpty( &FCB->DatagramList ) ) {
                DatagramRecvEntry = RemoveHeadList(&FCB->DatagramList);
                DatagramRecv = CONTAINING_RECORD(DatagramRecvEntry, AFD_STORED_DATAGRAM, ListEntry);
-               ExFreePool( DatagramRecv->Address );
-               ExFreePool( DatagramRecv );
+               ExFreePoolWithTag(DatagramRecv->Address, TAG_AFD_TRANSPORT_ADDRESS);
+               ExFreePoolWithTag(DatagramRecv, TAG_AFD_STORED_DATAGRAM);
         }
 
         SocketStateUnlock( FCB );
@@ -605,13 +604,15 @@ PacketSocketRecvComplete(
         return STATUS_FILE_CLOSED;
     }
 
-    DatagramRecv = ExAllocatePool( NonPagedPool, DGSize );
+    DatagramRecv = ExAllocatePoolWithTag(NonPagedPool,
+                                         DGSize,
+                                         TAG_AFD_STORED_DATAGRAM);
 
     if( DatagramRecv ) {
         DatagramRecv->Len = Irp->IoStatus.Information;
         RtlCopyMemory( DatagramRecv->Buffer, FCB->Recv.Window,
                        DatagramRecv->Len );
-        AFD_DbgPrint(MID_TRACE,("Received (A %x)\n",
+        AFD_DbgPrint(MID_TRACE,("Received (A %p)\n",
                                 FCB->AddressFrom->RemoteAddress));
         DatagramRecv->Address =
             TaCopyTransportAddress( FCB->AddressFrom->RemoteAddress );
@@ -621,7 +622,12 @@ PacketSocketRecvComplete(
     } else Status = STATUS_NO_MEMORY;
 
     if( !NT_SUCCESS( Status ) ) {
-        if( DatagramRecv ) ExFreePool( DatagramRecv );
+
+        if (DatagramRecv)
+        {
+            ExFreePoolWithTag(DatagramRecv, TAG_AFD_STORED_DATAGRAM);
+        }
+
         SocketStateUnlock( FCB );
         return Status;
     } else {
@@ -642,7 +648,7 @@ PacketSocketRecvComplete(
         NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp );
         RecvReq = GetLockedData(NextIrp, NextIrpSp);
 
-        AFD_DbgPrint(MID_TRACE,("RecvReq: %x, DatagramRecv: %x\n",
+        AFD_DbgPrint(MID_TRACE,("RecvReq: %p, DatagramRecv: %p\n",
                                 RecvReq, DatagramRecv));
 
         AFD_DbgPrint(MID_TRACE,("Satisfying\n"));
@@ -684,7 +690,6 @@ PacketSocketRecvComplete(
               FCB->Recv.Window,
               FCB->Recv.Size,
               FCB->AddressFrom,
-              &FCB->ReceiveIrp.Iosb,
               PacketSocketRecvComplete,
               FCB );
     }
@@ -705,7 +710,9 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PAFD_STORED_DATAGRAM DatagramRecv;
     KPROCESSOR_MODE LockMode;
 
-    AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
 
     if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );