… | |
… | |
1523 | } |
1523 | } |
1524 | |
1524 | |
1525 | #endif |
1525 | #endif |
1526 | |
1526 | |
1527 | int |
1527 | int |
1528 | eio__mtouch (void *mem, size_t len, int flags) |
1528 | eio__mtouch (eio_req *req) |
1529 | { |
1529 | { |
|
|
1530 | void *mem = req->ptr2; |
|
|
1531 | size_t len = req->size; |
|
|
1532 | int flags = req->int1; |
|
|
1533 | |
1530 | eio_page_align (&mem, &len); |
1534 | eio_page_align (&mem, &len); |
1531 | |
1535 | |
1532 | { |
1536 | { |
1533 | intptr_t addr = (intptr_t)mem; |
1537 | intptr_t addr = (intptr_t)mem; |
1534 | intptr_t end = addr + len; |
1538 | intptr_t end = addr + len; |
1535 | intptr_t page = eio_pagesize (); |
1539 | intptr_t page = eio_pagesize (); |
1536 | |
1540 | |
1537 | if (addr < end) |
1541 | if (addr < end) |
1538 | if (flags & EIO_MT_MODIFY) /* modify */ |
1542 | if (flags & EIO_MT_MODIFY) /* modify */ |
1539 | do { *((volatile sig_atomic_t *)addr) |= 0; } while ((addr += page) < len); |
1543 | do { *((volatile sig_atomic_t *)addr) |= 0; } while ((addr += page) < len && !EIO_CANCELLED (req)); |
1540 | else |
1544 | else |
1541 | do { *((volatile sig_atomic_t *)addr) ; } while ((addr += page) < len); |
1545 | do { *((volatile sig_atomic_t *)addr) ; } while ((addr += page) < len && !EIO_CANCELLED (req)); |
1542 | } |
1546 | } |
1543 | |
1547 | |
1544 | return 0; |
1548 | return 0; |
1545 | } |
1549 | } |
1546 | |
1550 | |
… | |
… | |
1720 | |
1724 | |
1721 | case EIO_SYNC: req->result = 0; sync (); break; |
1725 | case EIO_SYNC: req->result = 0; sync (); break; |
1722 | case EIO_FSYNC: req->result = fsync (req->int1); break; |
1726 | case EIO_FSYNC: req->result = fsync (req->int1); break; |
1723 | case EIO_FDATASYNC: req->result = fdatasync (req->int1); break; |
1727 | case EIO_FDATASYNC: req->result = fdatasync (req->int1); break; |
1724 | case EIO_MSYNC: req->result = eio__msync (req->ptr2, req->size, req->int1); break; |
1728 | case EIO_MSYNC: req->result = eio__msync (req->ptr2, req->size, req->int1); break; |
1725 | case EIO_MTOUCH: req->result = eio__mtouch (req->ptr2, req->size, req->int1); break; |
1729 | case EIO_MTOUCH: req->result = eio__mtouch (req); break; |
1726 | case EIO_MLOCK: req->result = eio__mlock (req->ptr2, req->size); break; |
1730 | case EIO_MLOCK: req->result = eio__mlock (req->ptr2, req->size); break; |
1727 | case EIO_MLOCKALL: req->result = eio__mlockall (req->int1); break; |
1731 | case EIO_MLOCKALL: req->result = eio__mlockall (req->int1); break; |
1728 | case EIO_SYNC_FILE_RANGE: req->result = eio__sync_file_range (req->int1, req->offs, req->size, req->int2); break; |
1732 | case EIO_SYNC_FILE_RANGE: req->result = eio__sync_file_range (req->int1, req->offs, req->size, req->int2); break; |
1729 | |
1733 | |
1730 | case EIO_READDIR: eio__scandir (req, self); break; |
1734 | case EIO_READDIR: eio__scandir (req, self); break; |
… | |
… | |
1774 | case EIO_NOP: |
1778 | case EIO_NOP: |
1775 | req->result = 0; |
1779 | req->result = 0; |
1776 | break; |
1780 | break; |
1777 | |
1781 | |
1778 | case EIO_CUSTOM: |
1782 | case EIO_CUSTOM: |
1779 | ((void (*)(eio_req *))req->feed) (req); |
1783 | req->feed (req); |
1780 | break; |
1784 | break; |
1781 | |
1785 | |
1782 | default: |
1786 | default: |
1783 | errno = ENOSYS; |
1787 | errno = ENOSYS; |
1784 | req->result = -1; |
1788 | req->result = -1; |
… | |
… | |
2005 | eio_req *eio_rename (const char *path, const char *new_path, int pri, eio_cb cb, void *data) |
2009 | eio_req *eio_rename (const char *path, const char *new_path, int pri, eio_cb cb, void *data) |
2006 | { |
2010 | { |
2007 | return eio__2path (EIO_RENAME, path, new_path, pri, cb, data); |
2011 | return eio__2path (EIO_RENAME, path, new_path, pri, cb, data); |
2008 | } |
2012 | } |
2009 | |
2013 | |
2010 | eio_req *eio_custom (eio_cb execute, int pri, eio_cb cb, void *data) |
2014 | eio_req *eio_custom (void (*)(eio_req *) execute, int pri, eio_cb cb, void *data); |
2011 | { |
2015 | { |
2012 | REQ (EIO_CUSTOM); req->feed = (void (*)(eio_req *))execute; SEND; |
2016 | REQ (EIO_CUSTOM); req->feed = execute; SEND; |
2013 | } |
2017 | } |
2014 | |
2018 | |
2015 | #endif |
2019 | #endif |
2016 | |
2020 | |
2017 | eio_req *eio_grp (eio_cb cb, void *data) |
2021 | eio_req *eio_grp (eio_cb cb, void *data) |