@@ -698,50 +698,51 @@ static u64 get_writepages_data_length(struct inode *inode,
698698}
699699
700700/*
701- * Write a single page , but leave the page locked.
701+ * Write a folio , but leave it locked.
702702 *
703703 * If we get a write error, mark the mapping for error, but still adjust the
704- * dirty page accounting (i.e., page is no longer dirty).
704+ * dirty page accounting (i.e., folio is no longer dirty).
705705 */
706- static int writepage_nounlock (struct page * page , struct writeback_control * wbc )
706+ static int write_folio_nounlock (struct folio * folio ,
707+ struct writeback_control * wbc )
707708{
708- struct folio * folio = page_folio ( page ) ;
709- struct inode * inode = page -> mapping -> host ;
709+ struct page * page = & folio -> page ;
710+ struct inode * inode = folio -> mapping -> host ;
710711 struct ceph_inode_info * ci = ceph_inode (inode );
711712 struct ceph_fs_client * fsc = ceph_inode_to_fs_client (inode );
712713 struct ceph_client * cl = fsc -> client ;
713714 struct ceph_snap_context * snapc , * oldest ;
714- loff_t page_off = page_offset ( page );
715+ loff_t page_off = folio_pos ( folio );
715716 int err ;
716- loff_t len = thp_size ( page );
717+ loff_t len = folio_size ( folio );
717718 loff_t wlen ;
718719 struct ceph_writeback_ctl ceph_wbc ;
719720 struct ceph_osd_client * osdc = & fsc -> client -> osdc ;
720721 struct ceph_osd_request * req ;
721722 bool caching = ceph_is_cache_enabled (inode );
722723 struct page * bounce_page = NULL ;
723724
724- doutc (cl , "%llx.%llx page %p idx %lu\n" , ceph_vinop (inode ), page ,
725- page -> index );
725+ doutc (cl , "%llx.%llx folio %p idx %lu\n" , ceph_vinop (inode ), folio ,
726+ folio -> index );
726727
727728 if (ceph_inode_is_shutdown (inode ))
728729 return - EIO ;
729730
730731 /* verify this is a writeable snap context */
731- snapc = page_snap_context (page );
732+ snapc = page_snap_context (& folio -> page );
732733 if (!snapc ) {
733- doutc (cl , "%llx.%llx page %p not dirty?\n" , ceph_vinop (inode ),
734- page );
734+ doutc (cl , "%llx.%llx folio %p not dirty?\n" , ceph_vinop (inode ),
735+ folio );
735736 return 0 ;
736737 }
737738 oldest = get_oldest_context (inode , & ceph_wbc , snapc );
738739 if (snapc -> seq > oldest -> seq ) {
739- doutc (cl , "%llx.%llx page %p snapc %p not writeable - noop\n" ,
740- ceph_vinop (inode ), page , snapc );
740+ doutc (cl , "%llx.%llx folio %p snapc %p not writeable - noop\n" ,
741+ ceph_vinop (inode ), folio , snapc );
741742 /* we should only noop if called by kswapd */
742743 WARN_ON (!(current -> flags & PF_MEMALLOC ));
743744 ceph_put_snap_context (oldest );
744- redirty_page_for_writepage (wbc , page );
745+ folio_redirty_for_writepage (wbc , folio );
745746 return 0 ;
746747 }
747748 ceph_put_snap_context (oldest );
@@ -758,8 +759,8 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
758759 len = ceph_wbc .i_size - page_off ;
759760
760761 wlen = IS_ENCRYPTED (inode ) ? round_up (len , CEPH_FSCRYPT_BLOCK_SIZE ) : len ;
761- doutc (cl , "%llx.%llx page %p index %lu on %llu~%llu snapc %p seq %lld\n" ,
762- ceph_vinop (inode ), page , page -> index , page_off , wlen , snapc ,
762+ doutc (cl , "%llx.%llx folio %p index %lu on %llu~%llu snapc %p seq %lld\n" ,
763+ ceph_vinop (inode ), folio , folio -> index , page_off , wlen , snapc ,
763764 snapc -> seq );
764765
765766 if (atomic_long_inc_return (& fsc -> writeback_count ) >
@@ -772,32 +773,32 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
772773 ceph_wbc .truncate_seq ,
773774 ceph_wbc .truncate_size , true);
774775 if (IS_ERR (req )) {
775- redirty_page_for_writepage (wbc , page );
776+ folio_redirty_for_writepage (wbc , folio );
776777 return PTR_ERR (req );
777778 }
778779
779780 if (wlen < len )
780781 len = wlen ;
781782
782- set_page_writeback ( page );
783+ folio_start_writeback ( folio );
783784 if (caching )
784- ceph_set_page_fscache (page );
785+ ceph_set_page_fscache (& folio -> page );
785786 ceph_fscache_write_to_cache (inode , page_off , len , caching );
786787
787788 if (IS_ENCRYPTED (inode )) {
788- bounce_page = fscrypt_encrypt_pagecache_blocks (page ,
789+ bounce_page = fscrypt_encrypt_pagecache_blocks (& folio -> page ,
789790 CEPH_FSCRYPT_BLOCK_SIZE , 0 ,
790791 GFP_NOFS );
791792 if (IS_ERR (bounce_page )) {
792- redirty_page_for_writepage (wbc , page );
793- end_page_writeback ( page );
793+ folio_redirty_for_writepage (wbc , folio );
794+ folio_end_writeback ( folio );
794795 ceph_osdc_put_request (req );
795796 return PTR_ERR (bounce_page );
796797 }
797798 }
798799
799800 /* it may be a short write due to an object boundary */
800- WARN_ON_ONCE (len > thp_size ( page ));
801+ WARN_ON_ONCE (len > folio_size ( folio ));
801802 osd_req_op_extent_osd_data_pages (req , 0 ,
802803 bounce_page ? & bounce_page : & page , wlen , 0 ,
803804 false, false);
@@ -823,25 +824,25 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
823824 if (err == - ERESTARTSYS ) {
824825 /* killed by SIGKILL */
825826 doutc (cl , "%llx.%llx interrupted page %p\n" ,
826- ceph_vinop (inode ), page );
827- redirty_page_for_writepage (wbc , page );
828- end_page_writeback ( page );
827+ ceph_vinop (inode ), folio );
828+ folio_redirty_for_writepage (wbc , folio );
829+ folio_end_writeback ( folio );
829830 return err ;
830831 }
831832 if (err == - EBLOCKLISTED )
832833 fsc -> blocklisted = true;
833- doutc (cl , "%llx.%llx setting page/ mapping error %d %p\n" ,
834- ceph_vinop (inode ), err , page );
834+ doutc (cl , "%llx.%llx setting mapping error %d %p\n" ,
835+ ceph_vinop (inode ), err , folio );
835836 mapping_set_error (& inode -> i_data , err );
836837 wbc -> pages_skipped ++ ;
837838 } else {
838839 doutc (cl , "%llx.%llx cleaned page %p\n" ,
839- ceph_vinop (inode ), page );
840+ ceph_vinop (inode ), folio );
840841 err = 0 ; /* vfs expects us to return 0 */
841842 }
842- oldest = detach_page_private ( page );
843+ oldest = folio_detach_private ( folio );
843844 WARN_ON_ONCE (oldest != snapc );
844- end_page_writeback ( page );
845+ folio_end_writeback ( folio );
845846 ceph_put_wrbuffer_cap_refs (ci , 1 , snapc );
846847 ceph_put_snap_context (snapc ); /* page's reference */
847848
@@ -1820,7 +1821,7 @@ ceph_find_incompatible(struct folio *folio)
18201821 doutc (cl , " %llx.%llx folio %p snapc %p not current, but oldest\n" ,
18211822 ceph_vinop (inode ), folio , snapc );
18221823 if (folio_clear_dirty_for_io (folio )) {
1823- int r = writepage_nounlock ( & folio -> page , NULL );
1824+ int r = write_folio_nounlock ( folio , NULL );
18241825 if (r < 0 )
18251826 return ERR_PTR (r );
18261827 }
0 commit comments