shmem.c (7ad0414bded6e8678840368be5cc72b9957a4478) | shmem.c (e4b57722d0e6be8820039a7d506378640aee5073) |
---|---|
1/* 2 * Resizable virtual memory filesystem for Linux. 3 * 4 * Copyright (C) 2000 Linus Torvalds. 5 * 2000 Transmeta Corp. 6 * 2000-2001 Christoph Rohland 7 * 2000-2001 SAP AG 8 * 2002 Red Hat Inc. --- 3129 unchanged lines hidden (view full) --- 3138 dir->i_ctime = dir->i_mtime = current_time(dir); 3139 d_instantiate(dentry, inode); 3140 dget(dentry); 3141 return 0; 3142} 3143 3144static void shmem_put_link(void *arg) 3145{ | 1/* 2 * Resizable virtual memory filesystem for Linux. 3 * 4 * Copyright (C) 2000 Linus Torvalds. 5 * 2000 Transmeta Corp. 6 * 2000-2001 Christoph Rohland 7 * 2000-2001 SAP AG 8 * 2002 Red Hat Inc. --- 3129 unchanged lines hidden (view full) --- 3138 dir->i_ctime = dir->i_mtime = current_time(dir); 3139 d_instantiate(dentry, inode); 3140 dget(dentry); 3141 return 0; 3142} 3143 3144static void shmem_put_link(void *arg) 3145{ |
3146 mark_page_accessed(arg); 3147 put_page(arg); | 3146 folio_mark_accessed(arg); 3147 folio_put(arg); |
3148} 3149 3150static const char *shmem_get_link(struct dentry *dentry, 3151 struct inode *inode, 3152 struct delayed_call *done) 3153{ | 3148} 3149 3150static const char *shmem_get_link(struct dentry *dentry, 3151 struct inode *inode, 3152 struct delayed_call *done) 3153{ |
3154 struct page *page = NULL; | 3154 struct folio *folio = NULL; |
3155 int error; | 3155 int error; |
3156 |
|
3156 if (!dentry) { | 3157 if (!dentry) { |
3157 page = find_get_page(inode->i_mapping, 0); 3158 if (!page) | 3158 folio = filemap_get_folio(inode->i_mapping, 0); 3159 if (!folio) |
3159 return ERR_PTR(-ECHILD); | 3160 return ERR_PTR(-ECHILD); |
3160 if (PageHWPoison(page) || 3161 !PageUptodate(page)) { 3162 put_page(page); | 3161 if (PageHWPoison(&folio->page) || 3162 !folio_test_uptodate(folio)) { 3163 folio_put(folio); |
3163 return ERR_PTR(-ECHILD); 3164 } 3165 } else { | 3164 return ERR_PTR(-ECHILD); 3165 } 3166 } else { |
3166 error = shmem_getpage(inode, 0, &page, SGP_READ); | 3167 error = shmem_get_folio(inode, 0, &folio, SGP_READ); |
3167 if (error) 3168 return ERR_PTR(error); | 3168 if (error) 3169 return ERR_PTR(error); |
3169 if (!page) | 3170 if (!folio) |
3170 return ERR_PTR(-ECHILD); | 3171 return ERR_PTR(-ECHILD); |
3171 if (PageHWPoison(page)) { 3172 unlock_page(page); 3173 put_page(page); | 3172 if (PageHWPoison(&folio->page)) { 3173 folio_unlock(folio); 3174 folio_put(folio); |
3174 return ERR_PTR(-ECHILD); 3175 } | 3175 return ERR_PTR(-ECHILD); 3176 } |
3176 unlock_page(page); | 3177 folio_unlock(folio); |
3177 } | 3178 } |
3178 set_delayed_call(done, shmem_put_link, page); 3179 return page_address(page); | 3179 set_delayed_call(done, shmem_put_link, folio); 3180 return folio_address(folio); |
3180} 3181 3182#ifdef CONFIG_TMPFS_XATTR 3183 3184static int shmem_fileattr_get(struct dentry *dentry, struct fileattr *fa) 3185{ 3186 struct shmem_inode_info *info = SHMEM_I(d_inode(dentry)); 3187 --- 1109 unchanged lines hidden --- | 3181} 3182 3183#ifdef CONFIG_TMPFS_XATTR 3184 3185static int shmem_fileattr_get(struct dentry *dentry, struct fileattr *fa) 3186{ 3187 struct shmem_inode_info *info = SHMEM_I(d_inode(dentry)); 3188 --- 1109 unchanged lines hidden --- |