Pass correctly aligned address to msync.
authordrepper <drepper>
Fri, 10 Sep 2004 23:55:51 +0000 (23:55 +0000)
committerdrepper <drepper>
Fri, 10 Sep 2004 23:55:51 +0000 (23:55 +0000)
nscd/grpcache.c
nscd/hstcache.c
nscd/pwdcache.c

index 7315eec..d07693f 100644 (file)
@@ -291,8 +291,13 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
        {
          /* If necessary, we also propagate the data to disk.  */
          if (db->persistent)
-           // XXX async OK?
-           msync (dataset, total + n, MS_ASYNC);
+           {
+             // XXX async OK?
+             uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1;
+             msync ((void *) pval,
+                    ((uintptr_t) dataset & pagesize_m1) + total + n,
+                    MS_ASYNC);
+           }
 
          /* Now get the lock to safely insert the records.  */
          pthread_rwlock_rdlock (&db->lock);
index 94568d0..78e29fb 100644 (file)
@@ -332,8 +332,13 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
        {
          /* If necessary, we also propagate the data to disk.  */
          if (db->persistent)
-           // XXX async OK?
-           msync (dataset, total + req->key_len, MS_ASYNC);
+           {
+             // XXX async OK?
+             uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1;
+             msync ((void *) pval,
+                    ((uintptr_t) dataset & pagesize_m1)
+                    + total + req->key_len, MS_ASYNC);
+           }
 
          addr_list_type = (hst->h_length == NS_INADDRSZ
                            ? GETHOSTBYADDR : GETHOSTBYADDRv6);
index b322778..2354b6d 100644 (file)
@@ -287,8 +287,13 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
        {
          /* If necessary, we also propagate the data to disk.  */
          if (db->persistent)
-           // XXX async OK?
-           msync (dataset, total + n, MS_ASYNC);
+           {
+             // XXX async OK?
+             uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1;
+             msync ((void *) pval,
+                    ((uintptr_t) dataset & pagesize_m1) + total + n,
+                    MS_ASYNC);
+           }
 
          /* Now get the lock to safely insert the records.  */
          pthread_rwlock_rdlock (&db->lock);