Index: src/wp-admin/includes/class-wp-ms-sites-list-table.php
===================================================================
--- src/wp-admin/includes/class-wp-ms-sites-list-table.php	(revision 46199)
+++ src/wp-admin/includes/class-wp-ms-sites-list-table.php	(working copy)
@@ -231,6 +231,48 @@
 	}
 
 	/**
+	 * Extra controls to be displayed between bulk actions and pagination.
+	 *
+	 * @since 5.3.0
+	 *
+	 * @param string $which
+	 */
+	protected function extra_tablenav( $which ) {
+		?>
+		<div class="alignleft actions">
+		<?php
+		if ( 'top' === $which ) {
+			ob_start();
+
+			/**
+			 * Fires before the Filter button on the MS sites list table.
+			 *
+			 * @since 5.3.0
+			 *
+			 * @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
+			 */
+			do_action( 'restrict_manage_sites', $which );
+			$output = ob_get_clean();
+			if ( ! empty( $output ) ) {
+				echo $output;
+				submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'site-query-submit' ) );
+			}
+		}
+		?>
+		</div>
+		<?php
+		/**
+		 * Fires immediately following the closing "actions" div in the tablenav for the
+		 * MS sites list table.
+		 *
+		 * @since 5.3.0
+		 *
+		 * @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
+		 */
+		do_action( 'manage_sites_extra_tablenav', $which );
+	}
+
+	/**
 	 * @return array
 	 */
 	public function get_columns() {
Index: src/wp-admin/network/sites.php
===================================================================
--- src/wp-admin/network/sites.php	(revision 46199)
+++ src/wp-admin/network/sites.php	(working copy)
@@ -231,14 +231,12 @@
 					wp_safe_redirect( $redirect_to );
 					exit();
 				}
-			} else {
-				$location = network_admin_url( 'sites.php' );
-				if ( ! empty( $_REQUEST['paged'] ) ) {
-					$location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location );
-				}
-				wp_redirect( $location );
-				exit();
+			} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) {
+				// process query defined by WP_MS_Site_List_Table::extra_table_nav().
+				wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
+				exit;
 			}
+
 			break;
 
 		case 'archiveblog':
