@@ -2532,7 +2532,7 @@ EXPORT_SYMBOL_GPL(nfs_unlink);
25322532int nfs_symlink (struct mnt_idmap * idmap , struct inode * dir ,
25332533 struct dentry * dentry , const char * symname )
25342534{
2535- struct page * page ;
2535+ struct folio * folio ;
25362536 char * kaddr ;
25372537 struct iattr attr ;
25382538 unsigned int pathlen = strlen (symname );
@@ -2547,24 +2547,24 @@ int nfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
25472547 attr .ia_mode = S_IFLNK | S_IRWXUGO ;
25482548 attr .ia_valid = ATTR_MODE ;
25492549
2550- page = alloc_page (GFP_USER );
2551- if (!page )
2550+ folio = folio_alloc (GFP_USER , 0 );
2551+ if (!folio )
25522552 return - ENOMEM ;
25532553
2554- kaddr = page_address ( page );
2554+ kaddr = folio_address ( folio );
25552555 memcpy (kaddr , symname , pathlen );
25562556 if (pathlen < PAGE_SIZE )
25572557 memset (kaddr + pathlen , 0 , PAGE_SIZE - pathlen );
25582558
25592559 trace_nfs_symlink_enter (dir , dentry );
2560- error = NFS_PROTO (dir )-> symlink (dir , dentry , page , pathlen , & attr );
2560+ error = NFS_PROTO (dir )-> symlink (dir , dentry , folio , pathlen , & attr );
25612561 trace_nfs_symlink_exit (dir , dentry , error );
25622562 if (error != 0 ) {
25632563 dfprintk (VFS , "NFS: symlink(%s/%lu, %pd, %s) error %d\n" ,
25642564 dir -> i_sb -> s_id , dir -> i_ino ,
25652565 dentry , symname , error );
25662566 d_drop (dentry );
2567- __free_page ( page );
2567+ folio_put ( folio );
25682568 return error ;
25692569 }
25702570
@@ -2574,18 +2574,13 @@ int nfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
25742574 * No big deal if we can't add this page to the page cache here.
25752575 * READLINK will get the missing page from the server if needed.
25762576 */
2577- if (!add_to_page_cache_lru (page , d_inode (dentry )-> i_mapping , 0 ,
2578- GFP_KERNEL )) {
2579- SetPageUptodate (page );
2580- unlock_page (page );
2581- /*
2582- * add_to_page_cache_lru() grabs an extra page refcount.
2583- * Drop it here to avoid leaking this page later.
2584- */
2585- put_page (page );
2586- } else
2587- __free_page (page );
2577+ if (filemap_add_folio (d_inode (dentry )-> i_mapping , folio , 0 ,
2578+ GFP_KERNEL ) == 0 ) {
2579+ folio_mark_uptodate (folio );
2580+ folio_unlock (folio );
2581+ }
25882582
2583+ folio_put (folio );
25892584 return 0 ;
25902585}
25912586EXPORT_SYMBOL_GPL (nfs_symlink );
0 commit comments