sctp_cmd_seq_t *commands)
 {
        struct sctp_chunk *chunk = arg;
+       sctp_arg_t force = SCTP_NOFORCE();
        int error;
 
        if (!sctp_vtag_verify(chunk, asoc)) {
                BUG();
        }
 
+       if (chunk->chunk_hdr->flags & SCTP_DATA_SACK_IMM)
+               force = SCTP_FORCE();
+
        if (asoc->autoclose) {
                sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART,
                                SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE));
         * more aggressive than the following algorithms allow.
         */
        if (chunk->end_of_packet)
-               sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_NOFORCE());
+               sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, force);
 
        return SCTP_DISPOSITION_CONSUME;
 
 
 discard_noforce:
        if (chunk->end_of_packet)
-               sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_NOFORCE());
+               sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, force);
 
        return SCTP_DISPOSITION_DISCARD;
 consume: