This is the 4.19.278 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmQUF3AACgkQONu9yGCS aT4OSxAAswpeK9OJvLyqcaC/ee6e1twIqffN670U8TEIn7Ys4BnCuD4v7hPOOAOh 1VUFFFAi614G6D3Em4DZGZaTudPklIaHY+iIYVSUMM6N974CM+wMPgMpQzYeSCqt Jie/thl4ZVL14NE3tqIFwICEyxicU/1+YwykLmMOI1c+jEGR0aPSiBeuyie3Bg/3 NAOm1DRgv0XRtJWg9APMUC85qbhQrO+Z9irfWNlq2NUwj8H9vJSZFGVL2qINGyMU F5l+hGjVJkXBO5y7ov380EdsXKLijubGUQMYOwHk6xK5DF8zXtD4e8l0tnvyQHtb Sf0/7tIW2w0chVHJodvmcpdGzIU7XJwPlexxAyiaDsh5CA2zzaqEZwcT+wFXx5cd iF516IuR64wDfYz5MhoFeK4J2H5qodQgtQY90PChy4+aw5ITIjZEGM8AtaeyHKQs y8uDx7O+RIzZLGsBLZSuMilsWlicko4eBeUDhzoIt8SOGcBojZ1b55DeAOnSw5rN yKRk3Am/m9utPQKpBWJkUk4ou5Hr02vMYo8IFOGoYUOzV8ZX4/vtEnSJLBwMtMUu DQ8PD6VcUS/2dbMgd8cGxPJ8DCN5g4BWEQnFRDg7MfHrNW6r7l256uxkC13s89cF UpUczRNwKF2ZkJ8bnQ7YD0Xa94tWtcKY/Ckebz0JnP8VgwgCaSQ= =0HUJ -----END PGP SIGNATURE----- Merge 4.19.278 into android-4.19-stable Changes in 4.19.278 fs: prevent out-of-bounds array speculation when closing a file descriptor x86/CPU/AMD: Disable XSAVES on AMD family 0x17 ext4: fix RENAME_WHITEOUT handling for inline directories ext4: fix another off-by-one fsmap error on 1k block filesystems ext4: move where set the MAY_INLINE_DATA flag is set ext4: fix WARNING in ext4_update_inline_data ext4: zero i_disksize when initializing the bootloader inode nfc: change order inside nfc_se_io error path udf: Explain handling of load_nls() failure udf: reduce leakage of blocks related to named streams udf: Remove pointless union in udf_inode_info udf: Preserve link count of system files udf: Detect system inodes linked into directory hierarchy kbuild: fix false-positive need-builtin calculation kbuild: generate modules.order only in directories visited by obj-y/m scsi: core: Remove the /proc/scsi/${proc_name} directory earlier Revert "spi: mt7621: Fix an error message in mt7621_spi_probe()" MIPS: Fix a compilation issue alpha: fix R_ALPHA_LITERAL reloc for large modules macintosh: windfarm: Use unsigned type for 1-bit bitfields PCI: Add SolidRun vendor ID media: ov5640: Fix analogue gain control tipc: improve function tipc_wait_for_cond() drm/i915: Don't use BAR mappings for ring buffers with LLC net: caif: Fix use-after-free in cfusbl_device_notify() nfc: fdp: add null check of devm_kmalloc_array in fdp_nci_i2c_read_device_properties ila: do not generate empty messages in ila_xlat_nl_cmd_get_mapping() Linux 4.19.278 Change-Id: I082984fb2dca13b0f44740839121850ea5531acf Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
71ef7ce106
34 changed files with 149 additions and 78 deletions
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 277
|
||||
SUBLEVEL = 278
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
|
|
@ -158,10 +158,8 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
|
|||
base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr;
|
||||
symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr;
|
||||
|
||||
/* The small sections were sorted to the end of the segment.
|
||||
The following should definitely cover them. */
|
||||
gp = (u64)me->core_layout.base + me->core_layout.size - 0x8000;
|
||||
got = sechdrs[me->arch.gotsecindex].sh_addr;
|
||||
gp = got + 0x8000;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
unsigned long r_sym = ELF64_R_SYM (rela[i].r_info);
|
||||
|
|
|
@ -377,7 +377,7 @@ struct pci_msu {
|
|||
PCI_CFG04_STAT_SSE | \
|
||||
PCI_CFG04_STAT_PE)
|
||||
|
||||
#define KORINA_CNFG1 ((KORINA_STAT<<16)|KORINA_CMD)
|
||||
#define KORINA_CNFG1 (KORINA_STAT | KORINA_CMD)
|
||||
|
||||
#define KORINA_REVID 0
|
||||
#define KORINA_CLASS_CODE 0
|
||||
|
|
|
@ -199,6 +199,15 @@ static void init_amd_k6(struct cpuinfo_x86 *c)
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Work around Erratum 1386. The XSAVES instruction malfunctions in
|
||||
* certain circumstances on Zen1/2 uarch, and not all parts have had
|
||||
* updated microcode at the time of writing (March 2023).
|
||||
*
|
||||
* Affected parts all have no supervisor XSAVE states, meaning that
|
||||
* the XSAVEC instruction (which works fine) is equivalent.
|
||||
*/
|
||||
clear_cpu_cap(c, X86_FEATURE_XSAVES);
|
||||
}
|
||||
|
||||
static void init_amd_k7(struct cpuinfo_x86 *c)
|
||||
|
|
|
@ -1083,7 +1083,7 @@ int intel_ring_pin(struct intel_ring *ring,
|
|||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
if (i915_vma_is_map_and_fenceable(vma))
|
||||
if (i915_vma_is_map_and_fenceable(vma) && !HAS_LLC(vma->vm->i915))
|
||||
addr = (void __force *)i915_vma_pin_iomap(vma);
|
||||
else
|
||||
addr = i915_gem_object_pin_map(vma->obj, map);
|
||||
|
@ -1118,7 +1118,7 @@ void intel_ring_unpin(struct intel_ring *ring)
|
|||
/* Discard any unused bytes beyond that submitted to hw. */
|
||||
intel_ring_reset(ring, ring->tail);
|
||||
|
||||
if (i915_vma_is_map_and_fenceable(ring->vma))
|
||||
if (i915_vma_is_map_and_fenceable(ring->vma) && !HAS_LLC(ring->vma->vm->i915))
|
||||
i915_vma_unpin_iomap(ring->vma);
|
||||
else
|
||||
i915_gem_object_unpin_map(ring->vma->obj);
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
#endif
|
||||
|
||||
struct wf_lm75_sensor {
|
||||
int ds1775 : 1;
|
||||
int inited : 1;
|
||||
unsigned int ds1775 : 1;
|
||||
unsigned int inited : 1;
|
||||
struct i2c_client *i2c;
|
||||
struct wf_sensor sens;
|
||||
};
|
||||
|
|
|
@ -275,8 +275,8 @@ struct smu_cpu_power_sensor {
|
|||
struct list_head link;
|
||||
struct wf_sensor *volts;
|
||||
struct wf_sensor *amps;
|
||||
int fake_volts : 1;
|
||||
int quadratic : 1;
|
||||
unsigned int fake_volts : 1;
|
||||
unsigned int quadratic : 1;
|
||||
struct wf_sensor sens;
|
||||
};
|
||||
#define to_smu_cpu_power(c) container_of(c, struct smu_cpu_power_sensor, sens)
|
||||
|
|
|
@ -2447,7 +2447,7 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
|
|||
/* Auto/manual gain */
|
||||
ctrls->auto_gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_AUTOGAIN,
|
||||
0, 1, 1, 1);
|
||||
ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_GAIN,
|
||||
ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_ANALOGUE_GAIN,
|
||||
0, 1023, 1, 0);
|
||||
|
||||
ctrls->saturation = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_SATURATION,
|
||||
|
|
|
@ -263,6 +263,9 @@ static void fdp_nci_i2c_read_device_properties(struct device *dev,
|
|||
len, sizeof(**fw_vsc_cfg),
|
||||
GFP_KERNEL);
|
||||
|
||||
if (!*fw_vsc_cfg)
|
||||
goto alloc_err;
|
||||
|
||||
r = device_property_read_u8_array(dev, FDP_DP_FW_VSC_CFG_NAME,
|
||||
*fw_vsc_cfg, len);
|
||||
|
||||
|
@ -276,6 +279,7 @@ vsc_read_err:
|
|||
*fw_vsc_cfg = NULL;
|
||||
}
|
||||
|
||||
alloc_err:
|
||||
dev_dbg(dev, "Clock type: %d, clock frequency: %d, VSC: %s",
|
||||
*clock_type, *clock_freq, *fw_vsc_cfg != NULL ? "yes" : "no");
|
||||
}
|
||||
|
|
|
@ -178,6 +178,7 @@ void scsi_remove_host(struct Scsi_Host *shost)
|
|||
scsi_forget_host(shost);
|
||||
mutex_unlock(&shost->scan_mutex);
|
||||
scsi_proc_host_rm(shost);
|
||||
scsi_proc_hostdir_rm(shost->hostt);
|
||||
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
if (scsi_host_set_state(shost, SHOST_DEL))
|
||||
|
@ -329,6 +330,7 @@ static void scsi_host_dev_release(struct device *dev)
|
|||
struct Scsi_Host *shost = dev_to_shost(dev);
|
||||
struct device *parent = dev->parent;
|
||||
|
||||
/* In case scsi_remove_host() has not been called. */
|
||||
scsi_proc_hostdir_rm(shost->hostt);
|
||||
|
||||
/* Wait for functions invoked through call_rcu(&shost->rcu, ...) */
|
||||
|
|
|
@ -442,9 +442,11 @@ static int mt7621_spi_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(base);
|
||||
|
||||
clk = devm_clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(clk))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(clk),
|
||||
"unable to get SYS clock\n");
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(&pdev->dev, "unable to get SYS clock, err=%d\n",
|
||||
status);
|
||||
return PTR_ERR(clk);
|
||||
}
|
||||
|
||||
status = clk_prepare_enable(clk);
|
||||
if (status)
|
||||
|
|
|
@ -486,6 +486,8 @@ static int ext4_getfsmap_datadev(struct super_block *sb,
|
|||
keys[0].fmr_physical = bofs;
|
||||
if (keys[1].fmr_physical >= eofs)
|
||||
keys[1].fmr_physical = eofs - 1;
|
||||
if (keys[1].fmr_physical < keys[0].fmr_physical)
|
||||
return 0;
|
||||
start_fsb = keys[0].fmr_physical;
|
||||
end_fsb = keys[1].fmr_physical;
|
||||
|
||||
|
|
|
@ -158,7 +158,6 @@ int ext4_find_inline_data_nolock(struct inode *inode)
|
|||
(void *)ext4_raw_inode(&is.iloc));
|
||||
EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE +
|
||||
le32_to_cpu(is.s.here->e_value_size);
|
||||
ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
|
||||
}
|
||||
out:
|
||||
brelse(is.iloc.bh);
|
||||
|
|
|
@ -4939,8 +4939,13 @@ static inline int ext4_iget_extra_inode(struct inode *inode,
|
|||
|
||||
if (EXT4_INODE_HAS_XATTR_SPACE(inode) &&
|
||||
*magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
|
||||
int err;
|
||||
|
||||
ext4_set_inode_state(inode, EXT4_STATE_XATTR);
|
||||
return ext4_find_inline_data_nolock(inode);
|
||||
err = ext4_find_inline_data_nolock(inode);
|
||||
if (!err && ext4_has_inline_data(inode))
|
||||
ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
|
||||
return err;
|
||||
} else
|
||||
EXT4_I(inode)->i_inline_off = 0;
|
||||
return 0;
|
||||
|
|
|
@ -178,6 +178,7 @@ static long swap_inode_boot_loader(struct super_block *sb,
|
|||
ei_bl->i_flags = 0;
|
||||
inode_set_iversion(inode_bl, 1);
|
||||
i_size_write(inode_bl, 0);
|
||||
EXT4_I(inode_bl)->i_disksize = inode_bl->i_size;
|
||||
inode_bl->i_mode = S_IFREG;
|
||||
if (ext4_has_feature_extents(sb)) {
|
||||
ext4_set_inode_flag(inode_bl, EXT4_INODE_EXTENTS);
|
||||
|
|
|
@ -1578,11 +1578,10 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,
|
|||
int has_inline_data = 1;
|
||||
ret = ext4_find_inline_entry(dir, fname, res_dir,
|
||||
&has_inline_data);
|
||||
if (has_inline_data) {
|
||||
if (inlined)
|
||||
*inlined = 1;
|
||||
if (inlined)
|
||||
*inlined = has_inline_data;
|
||||
if (has_inline_data)
|
||||
goto cleanup_and_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if ((namelen <= 2) && (name[0] == '.') &&
|
||||
|
@ -3736,7 +3735,8 @@ static void ext4_resetent(handle_t *handle, struct ext4_renament *ent,
|
|||
* so the old->de may no longer valid and need to find it again
|
||||
* before reset old inode info.
|
||||
*/
|
||||
old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
|
||||
old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de,
|
||||
&old.inlined);
|
||||
if (IS_ERR(old.bh))
|
||||
retval = PTR_ERR(old.bh);
|
||||
if (!old.bh)
|
||||
|
@ -3898,7 +3898,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
return retval;
|
||||
}
|
||||
|
||||
old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
|
||||
old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de,
|
||||
&old.inlined);
|
||||
if (IS_ERR(old.bh))
|
||||
return PTR_ERR(old.bh);
|
||||
/*
|
||||
|
|
|
@ -2823,6 +2823,9 @@ shift:
|
|||
(void *)header, total_ino);
|
||||
EXT4_I(inode)->i_extra_isize = new_extra_isize;
|
||||
|
||||
if (ext4_has_inline_data(inode))
|
||||
error = ext4_find_inline_data_nolock(inode);
|
||||
|
||||
cleanup:
|
||||
if (error && (mnt_count != le16_to_cpu(sbi->s_es->s_mnt_count))) {
|
||||
ext4_warning(inode->i_sb, "Unable to expand inode %lu. Delete some EAs or run e2fsck.",
|
||||
|
|
|
@ -627,6 +627,7 @@ int __close_fd(struct files_struct *files, unsigned fd)
|
|||
fdt = files_fdtable(files);
|
||||
if (fd >= fdt->max_fds)
|
||||
goto out_unlock;
|
||||
fd = array_index_nospec(fd, fdt->max_fds);
|
||||
file = fdt->fd[fd];
|
||||
if (!file)
|
||||
goto out_unlock;
|
||||
|
|
|
@ -34,7 +34,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
|
|||
fibh->soffset = fibh->eoffset;
|
||||
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
|
||||
fi = udf_get_fileident(iinfo->i_ext.i_data -
|
||||
fi = udf_get_fileident(iinfo->i_data -
|
||||
(iinfo->i_efe ?
|
||||
sizeof(struct extendedFileEntry) :
|
||||
sizeof(struct fileEntry)),
|
||||
|
|
|
@ -50,7 +50,7 @@ static void __udf_adinicb_readpage(struct page *page)
|
|||
* So just sample it once and use the same value everywhere.
|
||||
*/
|
||||
kaddr = kmap_atomic(page);
|
||||
memcpy(kaddr, iinfo->i_ext.i_data + iinfo->i_lenEAttr, isize);
|
||||
memcpy(kaddr, iinfo->i_data + iinfo->i_lenEAttr, isize);
|
||||
memset(kaddr + isize, 0, PAGE_SIZE - isize);
|
||||
flush_dcache_page(page);
|
||||
SetPageUptodate(page);
|
||||
|
@ -76,8 +76,7 @@ static int udf_adinicb_writepage(struct page *page,
|
|||
BUG_ON(!PageLocked(page));
|
||||
|
||||
kaddr = kmap_atomic(page);
|
||||
memcpy(iinfo->i_ext.i_data + iinfo->i_lenEAttr, kaddr,
|
||||
i_size_read(inode));
|
||||
memcpy(iinfo->i_data + iinfo->i_lenEAttr, kaddr, i_size_read(inode));
|
||||
SetPageUptodate(page);
|
||||
kunmap_atomic(kaddr);
|
||||
mark_inode_dirty(inode);
|
||||
|
@ -213,7 +212,7 @@ long udf_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|||
return put_user(UDF_I(inode)->i_lenEAttr, (int __user *)arg);
|
||||
case UDF_GETEABLOCK:
|
||||
return copy_to_user((char __user *)arg,
|
||||
UDF_I(inode)->i_ext.i_data,
|
||||
UDF_I(inode)->i_data,
|
||||
UDF_I(inode)->i_lenEAttr) ? -EFAULT : 0;
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
|
|
|
@ -67,16 +67,16 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
|
|||
iinfo->i_efe = 1;
|
||||
if (UDF_VERS_USE_EXTENDED_FE > sbi->s_udfrev)
|
||||
sbi->s_udfrev = UDF_VERS_USE_EXTENDED_FE;
|
||||
iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize -
|
||||
sizeof(struct extendedFileEntry),
|
||||
GFP_KERNEL);
|
||||
iinfo->i_data = kzalloc(inode->i_sb->s_blocksize -
|
||||
sizeof(struct extendedFileEntry),
|
||||
GFP_KERNEL);
|
||||
} else {
|
||||
iinfo->i_efe = 0;
|
||||
iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize -
|
||||
sizeof(struct fileEntry),
|
||||
GFP_KERNEL);
|
||||
iinfo->i_data = kzalloc(inode->i_sb->s_blocksize -
|
||||
sizeof(struct fileEntry),
|
||||
GFP_KERNEL);
|
||||
}
|
||||
if (!iinfo->i_ext.i_data) {
|
||||
if (!iinfo->i_data) {
|
||||
iput(inode);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
|
|
@ -150,8 +150,8 @@ void udf_evict_inode(struct inode *inode)
|
|||
truncate_inode_pages_final(&inode->i_data);
|
||||
invalidate_inode_buffers(inode);
|
||||
clear_inode(inode);
|
||||
kfree(iinfo->i_ext.i_data);
|
||||
iinfo->i_ext.i_data = NULL;
|
||||
kfree(iinfo->i_data);
|
||||
iinfo->i_data = NULL;
|
||||
udf_clear_extent_cache(inode);
|
||||
if (want_delete) {
|
||||
udf_free_inode(inode);
|
||||
|
@ -278,14 +278,14 @@ int udf_expand_file_adinicb(struct inode *inode)
|
|||
kaddr = kmap_atomic(page);
|
||||
memset(kaddr + iinfo->i_lenAlloc, 0x00,
|
||||
PAGE_SIZE - iinfo->i_lenAlloc);
|
||||
memcpy(kaddr, iinfo->i_ext.i_data + iinfo->i_lenEAttr,
|
||||
memcpy(kaddr, iinfo->i_data + iinfo->i_lenEAttr,
|
||||
iinfo->i_lenAlloc);
|
||||
flush_dcache_page(page);
|
||||
SetPageUptodate(page);
|
||||
kunmap_atomic(kaddr);
|
||||
}
|
||||
down_write(&iinfo->i_data_sem);
|
||||
memset(iinfo->i_ext.i_data + iinfo->i_lenEAttr, 0x00,
|
||||
memset(iinfo->i_data + iinfo->i_lenEAttr, 0x00,
|
||||
iinfo->i_lenAlloc);
|
||||
iinfo->i_lenAlloc = 0;
|
||||
if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
|
||||
|
@ -303,8 +303,7 @@ int udf_expand_file_adinicb(struct inode *inode)
|
|||
lock_page(page);
|
||||
down_write(&iinfo->i_data_sem);
|
||||
kaddr = kmap_atomic(page);
|
||||
memcpy(iinfo->i_ext.i_data + iinfo->i_lenEAttr, kaddr,
|
||||
inode->i_size);
|
||||
memcpy(iinfo->i_data + iinfo->i_lenEAttr, kaddr, inode->i_size);
|
||||
kunmap_atomic(kaddr);
|
||||
unlock_page(page);
|
||||
iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB;
|
||||
|
@ -392,8 +391,7 @@ struct buffer_head *udf_expand_dir_adinicb(struct inode *inode,
|
|||
}
|
||||
mark_buffer_dirty_inode(dbh, inode);
|
||||
|
||||
memset(iinfo->i_ext.i_data + iinfo->i_lenEAttr, 0,
|
||||
iinfo->i_lenAlloc);
|
||||
memset(iinfo->i_data + iinfo->i_lenEAttr, 0, iinfo->i_lenAlloc);
|
||||
iinfo->i_lenAlloc = 0;
|
||||
eloc.logicalBlockNum = *block;
|
||||
eloc.partitionReferenceNum =
|
||||
|
@ -1241,7 +1239,7 @@ set_size:
|
|||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
|
||||
down_write(&iinfo->i_data_sem);
|
||||
udf_clear_extent_cache(inode);
|
||||
memset(iinfo->i_ext.i_data + iinfo->i_lenEAttr + newsize,
|
||||
memset(iinfo->i_data + iinfo->i_lenEAttr + newsize,
|
||||
0x00, bsize - newsize -
|
||||
udf_file_entry_alloc_offset(inode));
|
||||
iinfo->i_lenAlloc = newsize;
|
||||
|
@ -1377,6 +1375,7 @@ reread:
|
|||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
iinfo->i_hidden = hidden_inode;
|
||||
iinfo->i_unique = 0;
|
||||
iinfo->i_lenEAttr = 0;
|
||||
iinfo->i_lenExtents = 0;
|
||||
|
@ -1390,7 +1389,7 @@ reread:
|
|||
sizeof(struct extendedFileEntry));
|
||||
if (ret)
|
||||
goto out;
|
||||
memcpy(iinfo->i_ext.i_data,
|
||||
memcpy(iinfo->i_data,
|
||||
bh->b_data + sizeof(struct extendedFileEntry),
|
||||
bs - sizeof(struct extendedFileEntry));
|
||||
} else if (fe->descTag.tagIdent == cpu_to_le16(TAG_IDENT_FE)) {
|
||||
|
@ -1399,7 +1398,7 @@ reread:
|
|||
ret = udf_alloc_i_data(inode, bs - sizeof(struct fileEntry));
|
||||
if (ret)
|
||||
goto out;
|
||||
memcpy(iinfo->i_ext.i_data,
|
||||
memcpy(iinfo->i_data,
|
||||
bh->b_data + sizeof(struct fileEntry),
|
||||
bs - sizeof(struct fileEntry));
|
||||
} else if (fe->descTag.tagIdent == cpu_to_le16(TAG_IDENT_USE)) {
|
||||
|
@ -1412,7 +1411,7 @@ reread:
|
|||
sizeof(struct unallocSpaceEntry));
|
||||
if (ret)
|
||||
goto out;
|
||||
memcpy(iinfo->i_ext.i_data,
|
||||
memcpy(iinfo->i_data,
|
||||
bh->b_data + sizeof(struct unallocSpaceEntry),
|
||||
bs - sizeof(struct unallocSpaceEntry));
|
||||
return 0;
|
||||
|
@ -1470,6 +1469,8 @@ reread:
|
|||
iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr);
|
||||
iinfo->i_lenAlloc = le32_to_cpu(fe->lengthAllocDescs);
|
||||
iinfo->i_checkpoint = le32_to_cpu(fe->checkpoint);
|
||||
iinfo->i_streamdir = 0;
|
||||
iinfo->i_lenStreams = 0;
|
||||
} else {
|
||||
inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) <<
|
||||
(inode->i_sb->s_blocksize_bits - 9);
|
||||
|
@ -1483,6 +1484,16 @@ reread:
|
|||
iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr);
|
||||
iinfo->i_lenAlloc = le32_to_cpu(efe->lengthAllocDescs);
|
||||
iinfo->i_checkpoint = le32_to_cpu(efe->checkpoint);
|
||||
|
||||
/* Named streams */
|
||||
iinfo->i_streamdir = (efe->streamDirectoryICB.extLength != 0);
|
||||
iinfo->i_locStreamdir =
|
||||
lelb_to_cpu(efe->streamDirectoryICB.extLocation);
|
||||
iinfo->i_lenStreams = le64_to_cpu(efe->objectSize);
|
||||
if (iinfo->i_lenStreams >= inode->i_size)
|
||||
iinfo->i_lenStreams -= inode->i_size;
|
||||
else
|
||||
iinfo->i_lenStreams = 0;
|
||||
}
|
||||
inode->i_generation = iinfo->i_unique;
|
||||
|
||||
|
@ -1579,8 +1590,8 @@ out:
|
|||
static int udf_alloc_i_data(struct inode *inode, size_t size)
|
||||
{
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
iinfo->i_ext.i_data = kmalloc(size, GFP_KERNEL);
|
||||
if (!iinfo->i_ext.i_data)
|
||||
iinfo->i_data = kmalloc(size, GFP_KERNEL);
|
||||
if (!iinfo->i_data)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1654,7 +1665,7 @@ static int udf_update_inode(struct inode *inode, int do_sync)
|
|||
|
||||
use->lengthAllocDescs = cpu_to_le32(iinfo->i_lenAlloc);
|
||||
memcpy(bh->b_data + sizeof(struct unallocSpaceEntry),
|
||||
iinfo->i_ext.i_data, inode->i_sb->s_blocksize -
|
||||
iinfo->i_data, inode->i_sb->s_blocksize -
|
||||
sizeof(struct unallocSpaceEntry));
|
||||
use->descTag.tagIdent = cpu_to_le16(TAG_IDENT_USE);
|
||||
crclen = sizeof(struct unallocSpaceEntry);
|
||||
|
@ -1684,8 +1695,12 @@ static int udf_update_inode(struct inode *inode, int do_sync)
|
|||
|
||||
if (S_ISDIR(inode->i_mode) && inode->i_nlink > 0)
|
||||
fe->fileLinkCount = cpu_to_le16(inode->i_nlink - 1);
|
||||
else
|
||||
fe->fileLinkCount = cpu_to_le16(inode->i_nlink);
|
||||
else {
|
||||
if (iinfo->i_hidden)
|
||||
fe->fileLinkCount = cpu_to_le16(0);
|
||||
else
|
||||
fe->fileLinkCount = cpu_to_le16(inode->i_nlink);
|
||||
}
|
||||
|
||||
fe->informationLength = cpu_to_le64(inode->i_size);
|
||||
|
||||
|
@ -1723,7 +1738,7 @@ static int udf_update_inode(struct inode *inode, int do_sync)
|
|||
|
||||
if (iinfo->i_efe == 0) {
|
||||
memcpy(bh->b_data + sizeof(struct fileEntry),
|
||||
iinfo->i_ext.i_data,
|
||||
iinfo->i_data,
|
||||
inode->i_sb->s_blocksize - sizeof(struct fileEntry));
|
||||
fe->logicalBlocksRecorded = cpu_to_le64(lb_recorded);
|
||||
|
||||
|
@ -1742,12 +1757,22 @@ static int udf_update_inode(struct inode *inode, int do_sync)
|
|||
crclen = sizeof(struct fileEntry);
|
||||
} else {
|
||||
memcpy(bh->b_data + sizeof(struct extendedFileEntry),
|
||||
iinfo->i_ext.i_data,
|
||||
iinfo->i_data,
|
||||
inode->i_sb->s_blocksize -
|
||||
sizeof(struct extendedFileEntry));
|
||||
efe->objectSize = cpu_to_le64(inode->i_size);
|
||||
efe->objectSize =
|
||||
cpu_to_le64(inode->i_size + iinfo->i_lenStreams);
|
||||
efe->logicalBlocksRecorded = cpu_to_le64(lb_recorded);
|
||||
|
||||
if (iinfo->i_streamdir) {
|
||||
struct long_ad *icb_lad = &efe->streamDirectoryICB;
|
||||
|
||||
icb_lad->extLocation =
|
||||
cpu_to_lelb(iinfo->i_locStreamdir);
|
||||
icb_lad->extLength =
|
||||
cpu_to_le32(inode->i_sb->s_blocksize);
|
||||
}
|
||||
|
||||
udf_adjust_time(iinfo, inode->i_atime);
|
||||
udf_adjust_time(iinfo, inode->i_mtime);
|
||||
udf_adjust_time(iinfo, inode->i_ctime);
|
||||
|
@ -1846,8 +1871,13 @@ struct inode *__udf_iget(struct super_block *sb, struct kernel_lb_addr *ino,
|
|||
if (!inode)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (!(inode->i_state & I_NEW))
|
||||
if (!(inode->i_state & I_NEW)) {
|
||||
if (UDF_I(inode)->i_hidden != hidden_inode) {
|
||||
iput(inode);
|
||||
return ERR_PTR(-EFSCORRUPTED);
|
||||
}
|
||||
return inode;
|
||||
}
|
||||
|
||||
memcpy(&UDF_I(inode)->i_location, ino, sizeof(struct kernel_lb_addr));
|
||||
err = udf_read_inode(inode, hidden_inode);
|
||||
|
@ -2028,7 +2058,7 @@ void udf_write_aext(struct inode *inode, struct extent_position *epos,
|
|||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
if (!epos->bh)
|
||||
ptr = iinfo->i_ext.i_data + epos->offset -
|
||||
ptr = iinfo->i_data + epos->offset -
|
||||
udf_file_entry_alloc_offset(inode) +
|
||||
iinfo->i_lenEAttr;
|
||||
else
|
||||
|
@ -2120,7 +2150,7 @@ int8_t udf_current_aext(struct inode *inode, struct extent_position *epos,
|
|||
if (!epos->bh) {
|
||||
if (!epos->offset)
|
||||
epos->offset = udf_file_entry_alloc_offset(inode);
|
||||
ptr = iinfo->i_ext.i_data + epos->offset -
|
||||
ptr = iinfo->i_data + epos->offset -
|
||||
udf_file_entry_alloc_offset(inode) +
|
||||
iinfo->i_lenEAttr;
|
||||
alen = udf_file_entry_alloc_offset(inode) +
|
||||
|
|
|
@ -52,9 +52,9 @@ struct genericFormat *udf_add_extendedattr(struct inode *inode, uint32_t size,
|
|||
uint16_t crclen;
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
ea = iinfo->i_ext.i_data;
|
||||
ea = iinfo->i_data;
|
||||
if (iinfo->i_lenEAttr) {
|
||||
ad = iinfo->i_ext.i_data + iinfo->i_lenEAttr;
|
||||
ad = iinfo->i_data + iinfo->i_lenEAttr;
|
||||
} else {
|
||||
ad = ea;
|
||||
size += sizeof(struct extendedAttrHeaderDesc);
|
||||
|
@ -153,7 +153,7 @@ struct genericFormat *udf_get_extendedattr(struct inode *inode, uint32_t type,
|
|||
uint32_t offset;
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
ea = iinfo->i_ext.i_data;
|
||||
ea = iinfo->i_data;
|
||||
|
||||
if (iinfo->i_lenEAttr) {
|
||||
struct extendedAttrHeaderDesc *eahd;
|
||||
|
|
|
@ -478,8 +478,7 @@ add:
|
|||
if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
|
||||
block = dinfo->i_location.logicalBlockNum;
|
||||
fi = (struct fileIdentDesc *)
|
||||
(dinfo->i_ext.i_data +
|
||||
fibh->soffset -
|
||||
(dinfo->i_data + fibh->soffset -
|
||||
udf_ext0_offset(dir) +
|
||||
dinfo->i_lenEAttr);
|
||||
} else {
|
||||
|
@ -962,7 +961,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
|
|||
mark_buffer_dirty_inode(epos.bh, inode);
|
||||
ea = epos.bh->b_data + udf_ext0_offset(inode);
|
||||
} else
|
||||
ea = iinfo->i_ext.i_data + iinfo->i_lenEAttr;
|
||||
ea = iinfo->i_data + iinfo->i_lenEAttr;
|
||||
|
||||
eoffset = sb->s_blocksize - udf_ext0_offset(inode);
|
||||
pc = (struct pathComponent *)ea;
|
||||
|
@ -1142,7 +1141,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
retval = -EIO;
|
||||
if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
|
||||
dir_fi = udf_get_fileident(
|
||||
old_iinfo->i_ext.i_data -
|
||||
old_iinfo->i_data -
|
||||
(old_iinfo->i_efe ?
|
||||
sizeof(struct extendedFileEntry) :
|
||||
sizeof(struct fileEntry)),
|
||||
|
|
|
@ -65,7 +65,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
|
|||
}
|
||||
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
|
||||
loc = le32_to_cpu(((__le32 *)(iinfo->i_ext.i_data +
|
||||
loc = le32_to_cpu(((__le32 *)(iinfo->i_data +
|
||||
vdata->s_start_offset))[block]);
|
||||
goto translate;
|
||||
}
|
||||
|
|
|
@ -146,9 +146,12 @@ static struct inode *udf_alloc_inode(struct super_block *sb)
|
|||
|
||||
ei->i_unique = 0;
|
||||
ei->i_lenExtents = 0;
|
||||
ei->i_lenStreams = 0;
|
||||
ei->i_next_alloc_block = 0;
|
||||
ei->i_next_alloc_goal = 0;
|
||||
ei->i_strat4096 = 0;
|
||||
ei->i_streamdir = 0;
|
||||
ei->i_hidden = 0;
|
||||
init_rwsem(&ei->i_data_sem);
|
||||
ei->cached_extent.lstart = -1;
|
||||
spin_lock_init(&ei->i_extent_cache_lock);
|
||||
|
@ -172,7 +175,7 @@ static void init_once(void *foo)
|
|||
{
|
||||
struct udf_inode_info *ei = (struct udf_inode_info *)foo;
|
||||
|
||||
ei->i_ext.i_data = NULL;
|
||||
ei->i_data = NULL;
|
||||
inode_init_once(&ei->vfs_inode);
|
||||
}
|
||||
|
||||
|
@ -572,6 +575,11 @@ static int udf_parse_options(char *options, struct udf_options *uopt,
|
|||
if (!remount) {
|
||||
if (uopt->nls_map)
|
||||
unload_nls(uopt->nls_map);
|
||||
/*
|
||||
* load_nls() failure is handled later in
|
||||
* udf_fill_super() after all options are
|
||||
* parsed.
|
||||
*/
|
||||
uopt->nls_map = load_nls(args[0].from);
|
||||
uopt->flags |= (1 << UDF_FLAG_NLS_MAP);
|
||||
}
|
||||
|
@ -1200,7 +1208,7 @@ static int udf_load_vat(struct super_block *sb, int p_index, int type1_index)
|
|||
vat20 = (struct virtualAllocationTable20 *)bh->b_data;
|
||||
} else {
|
||||
vat20 = (struct virtualAllocationTable20 *)
|
||||
vati->i_ext.i_data;
|
||||
vati->i_data;
|
||||
}
|
||||
|
||||
map->s_type_specific.s_virtual.s_start_offset =
|
||||
|
|
|
@ -122,7 +122,7 @@ static int udf_symlink_filler(struct file *file, struct page *page)
|
|||
|
||||
down_read(&iinfo->i_data_sem);
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
|
||||
symlink = iinfo->i_ext.i_data + iinfo->i_lenEAttr;
|
||||
symlink = iinfo->i_data + iinfo->i_lenEAttr;
|
||||
} else {
|
||||
bh = sb_bread(inode->i_sb, pos);
|
||||
|
||||
|
|
|
@ -42,12 +42,12 @@ struct udf_inode_info {
|
|||
unsigned i_efe : 1; /* extendedFileEntry */
|
||||
unsigned i_use : 1; /* unallocSpaceEntry */
|
||||
unsigned i_strat4096 : 1;
|
||||
unsigned reserved : 26;
|
||||
union {
|
||||
struct short_ad *i_sad;
|
||||
struct long_ad *i_lad;
|
||||
__u8 *i_data;
|
||||
} i_ext;
|
||||
unsigned i_streamdir : 1;
|
||||
unsigned i_hidden : 1; /* hidden system inode */
|
||||
unsigned reserved : 24;
|
||||
__u8 *i_data;
|
||||
struct kernel_lb_addr i_locStreamdir;
|
||||
__u64 i_lenStreams;
|
||||
struct rw_semaphore i_data_sem;
|
||||
struct udf_ext_cache cached_extent;
|
||||
/* Spinlock for protecting extent cache */
|
||||
|
|
|
@ -3097,6 +3097,8 @@
|
|||
|
||||
#define PCI_VENDOR_ID_3COM_2 0xa727
|
||||
|
||||
#define PCI_VENDOR_ID_SOLIDRUN 0xd063
|
||||
|
||||
#define PCI_VENDOR_ID_DIGIUM 0xd161
|
||||
#define PCI_DEVICE_ID_DIGIUM_HFC4S 0xb410
|
||||
|
||||
|
|
|
@ -135,6 +135,9 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,
|
|||
struct usb_device *usbdev;
|
||||
int res;
|
||||
|
||||
if (what == NETDEV_UNREGISTER && dev->reg_state >= NETREG_UNREGISTERED)
|
||||
return 0;
|
||||
|
||||
/* Check whether we have a NCM device, and find its VID/PID. */
|
||||
if (!(dev->dev.parent && dev->dev.parent->driver &&
|
||||
strcmp(dev->dev.parent->driver->name, "cdc_ncm") == 0))
|
||||
|
|
|
@ -480,6 +480,7 @@ int ila_xlat_nl_cmd_get_mapping(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
rcu_read_lock();
|
||||
|
||||
ret = -ESRCH;
|
||||
ila = ila_lookup_by_params(&xp, ilan);
|
||||
if (ila) {
|
||||
ret = ila_dump_info(ila,
|
||||
|
|
|
@ -1464,8 +1464,8 @@ static int nfc_se_io(struct nfc_dev *dev, u32 se_idx,
|
|||
return rc;
|
||||
|
||||
error:
|
||||
kfree(cb_context);
|
||||
device_unlock(&dev->dev);
|
||||
kfree(cb_context);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -388,7 +388,7 @@ static int tipc_sk_sock_err(struct socket *sock, long *timeout)
|
|||
rc_ = tipc_sk_sock_err((sock_), timeo_); \
|
||||
if (rc_) \
|
||||
break; \
|
||||
prepare_to_wait(sk_sleep(sk_), &wait_, TASK_INTERRUPTIBLE); \
|
||||
add_wait_queue(sk_sleep(sk_), &wait_); \
|
||||
release_sock(sk_); \
|
||||
*(timeo_) = wait_woken(&wait_, TASK_INTERRUPTIBLE, *(timeo_)); \
|
||||
sched_annotate_sleep(); \
|
||||
|
|
|
@ -634,7 +634,9 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
|
|||
|
||||
PHONY += $(subdir-ym)
|
||||
$(subdir-ym):
|
||||
$(Q)$(MAKE) $(build)=$@ need-builtin=$(if $(findstring $@,$(subdir-obj-y)),1)
|
||||
$(Q)$(MAKE) $(build)=$@ \
|
||||
need-builtin=$(if $(filter $@/built-in.a, $(subdir-obj-y)),1) \
|
||||
need-modorder=$(if $(need-modorder),$(if $(filter $@/modules.order, $(modorder)),1))
|
||||
|
||||
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue