MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vm_object_page_collect_flush

Function vm_object_page_collect_flush

freebsd/vm/vm_object.c:1111–1152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1109}
1110
1111static int
1112vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int pagerflags,
1113 int flags, boolean_t *allclean, boolean_t *eio)
1114{
1115 vm_page_t ma[vm_pageout_page_count], p_first, tp;
1116 int count, i, mreq, runlen;
1117
1118 vm_page_lock_assert(p, MA_NOTOWNED);
1119 vm_page_assert_xbusied(p);
1120 VM_OBJECT_ASSERT_WLOCKED(object);
1121
1122 count = 1;
1123 mreq = 0;
1124
1125 for (tp = p; count < vm_pageout_page_count; count++) {
1126 tp = vm_page_next(tp);
1127 if (tp == NULL || vm_page_tryxbusy(tp) == 0)
1128 break;
1129 if (!vm_object_page_remove_write(tp, flags, allclean)) {
1130 vm_page_xunbusy(tp);
1131 break;
1132 }
1133 }
1134
1135 for (p_first = p; count < vm_pageout_page_count; count++) {
1136 tp = vm_page_prev(p_first);
1137 if (tp == NULL || vm_page_tryxbusy(tp) == 0)
1138 break;
1139 if (!vm_object_page_remove_write(tp, flags, allclean)) {
1140 vm_page_xunbusy(tp);
1141 break;
1142 }
1143 p_first = tp;
1144 mreq++;
1145 }
1146
1147 for (tp = p_first, i = 0; i < count; tp = TAILQ_NEXT(tp, listq), i++)
1148 ma[i] = tp;
1149
1150 vm_pageout_flush(ma, count, pagerflags, mreq, &runlen, eio);
1151 return (runlen);
1152}
1153
1154/*
1155 * Note that there is absolutely no sense in writing out

Callers 1

vm_object_page_cleanFunction · 0.85

Calls 5

vm_page_nextFunction · 0.85
vm_page_tryxbusyFunction · 0.85
vm_page_prevFunction · 0.85
vm_pageout_flushFunction · 0.85

Tested by

no test coverage detected