- /* Rest of code derived from __set_page_dirty_nobuffers */
- xa_lock_irqsave(&mapping->i_pages, flags);
+ for (i = 0; i < count; i++) {
+ page = pvec->pages[i];
+
+ ClearPageReclaim(page);
+
+ lock_page_memcg(page);
+ if (TestSetPageDirty(page)) {
+ /* page is already dirty .. no extra work needed
+ * set a flag for the i'th page to be skipped
+ */
+ unlock_page_memcg(page);
+ skip_pages |= (1 << i);
+ }
+ }
+
+ ll_xa_lock_irqsave(&mapping->i_pages, flags);