Whamcloud - gitweb
LU-12275 sec: check if page is empty with ZERO_PAGE 18/38918/8
authorSebastien Buisson <sbuisson@ddn.com>
Fri, 12 Jun 2020 10:52:28 +0000 (10:52 +0000)
committerOleg Drokin <green@whamcloud.com>
Mon, 20 Jul 2020 05:20:38 +0000 (05:20 +0000)
In osc_brw_fini_request(), page needs decryption only if it
is not empty. To check this, use ZERO_PAGE macro available
for all architectures, and compare with memcmp.
It will likely be faster/more efficient than comparing the
words by hand as may use optimized CPU instructions or ASM code.

Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: I5e04b72790e8acbceb1989ba3659e170c0b11192
Reviewed-on: https://review.whamcloud.com/38918
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osc/osc_request.c

index a9d95bc..e190f74 100644 (file)
@@ -2056,16 +2056,11 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc)
                }
                for (idx = 0; idx < aa->aa_page_count; idx++) {
                        struct brw_page *pg = aa->aa_ppga[idx];
                }
                for (idx = 0; idx < aa->aa_page_count; idx++) {
                        struct brw_page *pg = aa->aa_ppga[idx];
-                       __u64 *p, *q;
 
                        /* do not decrypt if page is all 0s */
 
                        /* do not decrypt if page is all 0s */
-                       p = q = page_address(pg->pg);
-                       while (p - q < PAGE_SIZE / sizeof(*p)) {
-                               if (*p != 0)
-                                       break;
-                               p++;
-                       }
-                       if (p - q == PAGE_SIZE / sizeof(*p)) {
+                       if (memcmp(page_address(pg->pg),
+                                  page_address(ZERO_PAGE(0)),
+                                  PAGE_SIZE) == 0) {
                                /* if page is empty forward info to upper layers
                                 * (ll_io_zero_page) by clearing PagePrivate2
                                 */
                                /* if page is empty forward info to upper layers
                                 * (ll_io_zero_page) by clearing PagePrivate2
                                 */