New code for 5.13:
- When a swap file is rejected, actually log the /name/ of the swapfile. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEUzaAxoMeQq6m2jMV+H93GTRKtOsFAmBerWkACgkQ+H93GTRK tOu2zhAAm22CPqLH4/MJ8E3+DSCcZ1b/IKPemHk8lcJbPEmhoMyRxG6TFndo4p38 7IfsC1BChP9RYj+XwP3CWlya2c68cCu87RScDOShtFpxRQbSSv3HYsYrssfKLAXq Mn6GaIoLJu16gtQmw5kIbaPyJDlik+dyjNHowzv13hrYhjVqp97GgSiNq0uMMyJ5 7yfyWCig42V06FCVLVEatNKecI0gZy2n1ZxwMTIzqfcI+ItzYCHf6TGirKd1IVF2 kqjqEg2kQmft8pr0fAmSXxF23fRrjCFm8zhDnBcHWsPSAXmONXVEhicSotX60NrB ++KE6/eiNJNGZSdhhzGyIAYZsdlDHq0GS7OM0LVxp19/yc4kAYoi3UIrg0PBHkwt D6gGWqDpMuPwq++Ao9dWzM1tpXlmKGCC5Ju5Oqv1BIPcgMBJ6cd9ZVgCJgwn0+k8 y6wrlW1JDJqY5JcYfPCCd1Y7EPR+3lTtYhD39/UKDEg89lNXur9PEPDW+eN8jsqE EHJri5eQuGfprsmXp7qqOEur0BU5vzi9+O95b/EiJSQiHu52EtvbZYppllj1V9nj Nm/uz8Uq2BBehFOdSDZ3QlzlOXlronq74DCaK9RdRmWoipIH09cTkPoctGahH2uk OpE/9y1PIU+Kl1N2GU5W7rGud/jMFyYK1BVmHeIkvYqbLMNSXug= =9Oxg -----END PGP SIGNATURE----- Merge tag 'iomap-5.13-merge-2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull iomap update from Darrick Wong: "A single patch to the iomap code, which augments what gets logged when someone tries to swapon an unacceptable swap file. (Yes, this is a continuation of the swapfile drama from last season...)" * tag 'iomap-5.13-merge-2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: iomap: improve the warnings from iomap_swapfile_activate
This commit is contained in:
commit
b34b95ebbb
@ -18,6 +18,7 @@ struct iomap_swapfile_info {
|
||||
uint64_t highest_ppage; /* highest physical addr seen (pages) */
|
||||
unsigned long nr_pages; /* number of pages collected */
|
||||
int nr_extents; /* extent count */
|
||||
struct file *file;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -70,6 +71,18 @@ static int iomap_swapfile_add_extent(struct iomap_swapfile_info *isi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iomap_swapfile_fail(struct iomap_swapfile_info *isi, const char *str)
|
||||
{
|
||||
char *buf, *p = ERR_PTR(-ENOMEM);
|
||||
|
||||
buf = kmalloc(PATH_MAX, GFP_KERNEL);
|
||||
if (buf)
|
||||
p = file_path(isi->file, buf, PATH_MAX);
|
||||
pr_err("swapon: file %s %s\n", IS_ERR(p) ? "<unknown>" : p, str);
|
||||
kfree(buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Accumulate iomaps for this swap file. We have to accumulate iomaps because
|
||||
* swap only cares about contiguous page-aligned physical extents and makes no
|
||||
@ -89,28 +102,20 @@ static loff_t iomap_swapfile_activate_actor(struct inode *inode, loff_t pos,
|
||||
break;
|
||||
case IOMAP_INLINE:
|
||||
/* No inline data. */
|
||||
pr_err("swapon: file is inline\n");
|
||||
return -EINVAL;
|
||||
return iomap_swapfile_fail(isi, "is inline");
|
||||
default:
|
||||
pr_err("swapon: file has unallocated extents\n");
|
||||
return -EINVAL;
|
||||
return iomap_swapfile_fail(isi, "has unallocated extents");
|
||||
}
|
||||
|
||||
/* No uncommitted metadata or shared blocks. */
|
||||
if (iomap->flags & IOMAP_F_DIRTY) {
|
||||
pr_err("swapon: file is not committed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (iomap->flags & IOMAP_F_SHARED) {
|
||||
pr_err("swapon: file has shared extents\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (iomap->flags & IOMAP_F_DIRTY)
|
||||
return iomap_swapfile_fail(isi, "is not committed");
|
||||
if (iomap->flags & IOMAP_F_SHARED)
|
||||
return iomap_swapfile_fail(isi, "has shared extents");
|
||||
|
||||
/* Only one bdev per swap file. */
|
||||
if (iomap->bdev != isi->sis->bdev) {
|
||||
pr_err("swapon: file is on multiple devices\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (iomap->bdev != isi->sis->bdev)
|
||||
return iomap_swapfile_fail(isi, "outside the main device");
|
||||
|
||||
if (isi->iomap.length == 0) {
|
||||
/* No accumulated extent, so just store it. */
|
||||
@ -139,6 +144,7 @@ int iomap_swapfile_activate(struct swap_info_struct *sis,
|
||||
struct iomap_swapfile_info isi = {
|
||||
.sis = sis,
|
||||
.lowest_ppage = (sector_t)-1ULL,
|
||||
.file = swap_file,
|
||||
};
|
||||
struct address_space *mapping = swap_file->f_mapping;
|
||||
struct inode *inode = mapping->host;
|
||||
|
Loading…
Reference in New Issue
Block a user