madvise.c (a38358c934f66bdff12db762998b88038d7bc44b) | madvise.c (d09e8ca6cb93bb4b97517a18fbbf7eccb0e9ff43) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/mm/madvise.c 4 * 5 * Copyright (C) 1999 Linus Torvalds 6 * Copyright (C) 2002 Christoph Hellwig 7 */ 8 --- 81 unchanged lines hidden (view full) --- 90 container_of(kref, struct anon_vma_name, kref); 91 kfree(anon_name); 92} 93 94struct anon_vma_name *anon_vma_name(struct vm_area_struct *vma) 95{ 96 mmap_assert_locked(vma->vm_mm); 97 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/mm/madvise.c 4 * 5 * Copyright (C) 1999 Linus Torvalds 6 * Copyright (C) 2002 Christoph Hellwig 7 */ 8 --- 81 unchanged lines hidden (view full) --- 90 container_of(kref, struct anon_vma_name, kref); 91 kfree(anon_name); 92} 93 94struct anon_vma_name *anon_vma_name(struct vm_area_struct *vma) 95{ 96 mmap_assert_locked(vma->vm_mm); 97 |
98 if (vma->vm_file) 99 return NULL; 100 | |
101 return vma->anon_name; 102} 103 104/* mmap_lock should be write-locked */ 105static int replace_anon_vma_name(struct vm_area_struct *vma, 106 struct anon_vma_name *anon_name) 107{ 108 struct anon_vma_name *orig_name = anon_vma_name(vma); --- 69 unchanged lines hidden (view full) --- 178 return error; 179 } 180 181success: 182 /* 183 * vm_flags is protected by the mmap_lock held in write mode. 184 */ 185 vma->vm_flags = new_flags; | 98 return vma->anon_name; 99} 100 101/* mmap_lock should be write-locked */ 102static int replace_anon_vma_name(struct vm_area_struct *vma, 103 struct anon_vma_name *anon_name) 104{ 105 struct anon_vma_name *orig_name = anon_vma_name(vma); --- 69 unchanged lines hidden (view full) --- 175 return error; 176 } 177 178success: 179 /* 180 * vm_flags is protected by the mmap_lock held in write mode. 181 */ 182 vma->vm_flags = new_flags; |
186 if (!vma->vm_file) { | 183 if (!vma->vm_file || vma_is_anon_shmem(vma)) { |
187 error = replace_anon_vma_name(vma, anon_name); 188 if (error) 189 return error; 190 } 191 192 return 0; 193} 194 --- 1073 unchanged lines hidden (view full) --- 1268static int madvise_vma_anon_name(struct vm_area_struct *vma, 1269 struct vm_area_struct **prev, 1270 unsigned long start, unsigned long end, 1271 unsigned long anon_name) 1272{ 1273 int error; 1274 1275 /* Only anonymous mappings can be named */ | 184 error = replace_anon_vma_name(vma, anon_name); 185 if (error) 186 return error; 187 } 188 189 return 0; 190} 191 --- 1073 unchanged lines hidden (view full) --- 1265static int madvise_vma_anon_name(struct vm_area_struct *vma, 1266 struct vm_area_struct **prev, 1267 unsigned long start, unsigned long end, 1268 unsigned long anon_name) 1269{ 1270 int error; 1271 1272 /* Only anonymous mappings can be named */ |
1276 if (vma->vm_file) | 1273 if (vma->vm_file && !vma_is_anon_shmem(vma)) |
1277 return -EBADF; 1278 1279 error = madvise_update_vma(vma, prev, start, end, vma->vm_flags, 1280 (struct anon_vma_name *)anon_name); 1281 1282 /* 1283 * madvise() returns EAGAIN if kernel resources, such as 1284 * slab, are temporarily unavailable. --- 230 unchanged lines hidden --- | 1274 return -EBADF; 1275 1276 error = madvise_update_vma(vma, prev, start, end, vma->vm_flags, 1277 (struct anon_vma_name *)anon_name); 1278 1279 /* 1280 * madvise() returns EAGAIN if kernel resources, such as 1281 * slab, are temporarily unavailable. --- 230 unchanged lines hidden --- |