Merge 4.19.279 into android-4.19-stable
Changes in 4.19.279 ext4: fix cgroup writeback accounting with fs-layer encryption fs: sysfs_emit_at: Remove PAGE_SIZE alignment check clk: HI655X: select REGMAP instead of depending on it tcp: tcp_make_synack() can be called from process context nfc: pn533: initialize struct pn533_out_arg properly qed/qed_dev: guard against a possible division by zero net: tunnels: annotate lockless accesses to dev->needed_headroom net: phy: smsc: bail out in lan87xx_read_status if genphy_read_status fails nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition net: usb: smsc75xx: Limit packet length to skb->len nvmet: avoid potential UAF in nvmet_req_complete() block: sunvdc: add check for mdesc_grab() returning NULL ipv4: Fix incorrect table ID in IOCTL path net: usb: smsc75xx: Move packet length check to prevent kernel panic in skb_pull net/iucv: Fix size of interrupt data ethernet: sun: add check for the mdesc_grab() hwmon: (adt7475) Display smoothing attributes in correct order hwmon: (adt7475) Fix masking of hysteresis registers hwmon: (xgene) Fix use after free bug in xgene_hwmon_remove due to race condition media: m5mols: fix off-by-one loop termination error mmc: atmel-mci: fix race between stop command and start of next command jffs2: correct logic when creating a hole in jffs2_write_begin ext4: fail ext4_iget if special inode unallocated ext4: fix task hung in ext4_xattr_delete_inode drm/amdkfd: Fix an illegal memory access sh: intc: Avoid spurious sizeof-pointer-div warning tracing: Check field value in hist_field_name() tracing: Make tracepoint lockdep check actually test something ftrace: Fix invalid address access in lookup_rec() when index is 0 fbdev: stifb: Provide valid pixelclock and add fb_check_var() checks x86/mm: Fix use of uninitialized buffer in sme_enable() drm/i915: Don't use stolen memory for ring buffers with LLC serial: 8250_em: Fix UART port type HID: core: Provide new max_buffer_size attribute to over-ride the default HID: uhid: Over-ride the default maximum data buffer value with our own Linux 4.19.279 Change-Id: I588a3903d05a52088eb3d8623ed955243db55fbd Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
b8d378e9bb
38 files changed
+159
-76
No files matched your search
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 278
|
||||
SUBLEVEL = 279
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
||||
@@ -563,7 +563,8 @@ void __init sme_enable(struct boot_params *bp)
|
||||
cmdline_ptr = (const char *)((u64)bp->hdr.cmd_line_ptr |
|
||||
((u64)bp->ext_cmd_line_ptr << 32));
|
||||
|
||||
cmdline_find_option(cmdline_ptr, cmdline_arg, buffer, sizeof(buffer));
|
||||
if (cmdline_find_option(cmdline_ptr, cmdline_arg, buffer, sizeof(buffer)) < 0)
|
||||
return;
|
||||
|
||||
if (!strncmp(buffer, cmdline_on, sizeof(buffer)))
|
||||
sme_me_mask = me_mask;
|
||||
|
||||
@@ -947,6 +947,8 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||
print_version();
|
||||
|
||||
hp = mdesc_grab();
|
||||
if (!hp)
|
||||
return -ENODEV;
|
||||
|
||||
err = -ENODEV;
|
||||
if ((vdev->dev_no << PARTITION_SHIFT) & ~(u64)MINORMASK) {
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ config COMMON_CLK_RK808
|
||||
config COMMON_CLK_HI655X
|
||||
tristate "Clock driver for Hi655x" if EXPERT
|
||||
depends on (MFD_HI655X_PMIC || COMPILE_TEST)
|
||||
depends on REGMAP
|
||||
select REGMAP
|
||||
default MFD_HI655X_PMIC
|
||||
---help---
|
||||
This driver supports the hi655x PMIC clock. This
|
||||
|
||||
@@ -529,16 +529,13 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
|
||||
struct kfd_event_waiter *event_waiters;
|
||||
uint32_t i;
|
||||
|
||||
event_waiters = kmalloc_array(num_events,
|
||||
sizeof(struct kfd_event_waiter),
|
||||
GFP_KERNEL);
|
||||
event_waiters = kcalloc(num_events, sizeof(struct kfd_event_waiter),
|
||||
GFP_KERNEL);
|
||||
if (!event_waiters)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; (event_waiters) && (i < num_events) ; i++) {
|
||||
for (i = 0; i < num_events; i++)
|
||||
init_wait(&event_waiters[i].wait);
|
||||
event_waiters[i].activated = false;
|
||||
}
|
||||
|
||||
return event_waiters;
|
||||
}
|
||||
|
||||
@@ -1132,10 +1132,11 @@ static struct i915_vma *
|
||||
intel_ring_create_vma(struct drm_i915_private *dev_priv, int size)
|
||||
{
|
||||
struct i915_address_space *vm = &dev_priv->ggtt.vm;
|
||||
struct drm_i915_gem_object *obj;
|
||||
struct drm_i915_gem_object *obj = NULL;
|
||||
struct i915_vma *vma;
|
||||
|
||||
obj = i915_gem_object_create_stolen(dev_priv, size);
|
||||
if (!HAS_LLC(dev_priv))
|
||||
obj = i915_gem_object_create_stolen(dev_priv, size);
|
||||
if (!obj)
|
||||
obj = i915_gem_object_create_internal(dev_priv, size);
|
||||
if (IS_ERR(obj))
|
||||
|
||||
+13
-5
@@ -258,6 +258,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
|
||||
{
|
||||
struct hid_report *report;
|
||||
struct hid_field *field;
|
||||
unsigned int max_buffer_size = HID_MAX_BUFFER_SIZE;
|
||||
unsigned int usages;
|
||||
unsigned int offset;
|
||||
unsigned int i;
|
||||
@@ -288,8 +289,11 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
|
||||
offset = report->size;
|
||||
report->size += parser->global.report_size * parser->global.report_count;
|
||||
|
||||
if (parser->device->ll_driver->max_buffer_size)
|
||||
max_buffer_size = parser->device->ll_driver->max_buffer_size;
|
||||
|
||||
/* Total size check: Allow for possible report index byte */
|
||||
if (report->size > (HID_MAX_BUFFER_SIZE - 1) << 3) {
|
||||
if (report->size > (max_buffer_size - 1) << 3) {
|
||||
hid_err(parser->device, "report is too long\n");
|
||||
return -1;
|
||||
}
|
||||
@@ -1567,6 +1571,7 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
|
||||
struct hid_report_enum *report_enum = hid->report_enum + type;
|
||||
struct hid_report *report;
|
||||
struct hid_driver *hdrv;
|
||||
int max_buffer_size = HID_MAX_BUFFER_SIZE;
|
||||
unsigned int a;
|
||||
u32 rsize, csize = size;
|
||||
u8 *cdata = data;
|
||||
@@ -1583,10 +1588,13 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
|
||||
|
||||
rsize = hid_compute_report_size(report);
|
||||
|
||||
if (report_enum->numbered && rsize >= HID_MAX_BUFFER_SIZE)
|
||||
rsize = HID_MAX_BUFFER_SIZE - 1;
|
||||
else if (rsize > HID_MAX_BUFFER_SIZE)
|
||||
rsize = HID_MAX_BUFFER_SIZE;
|
||||
if (hid->ll_driver->max_buffer_size)
|
||||
max_buffer_size = hid->ll_driver->max_buffer_size;
|
||||
|
||||
if (report_enum->numbered && rsize >= max_buffer_size)
|
||||
rsize = max_buffer_size - 1;
|
||||
else if (rsize > max_buffer_size)
|
||||
rsize = max_buffer_size;
|
||||
|
||||
if (csize < rsize) {
|
||||
dbg_hid("report %d is too short, (%d < %d)\n", report->id,
|
||||
|
||||
@@ -398,6 +398,7 @@ struct hid_ll_driver uhid_hid_driver = {
|
||||
.parse = uhid_hid_parse,
|
||||
.raw_request = uhid_hid_raw_request,
|
||||
.output_report = uhid_hid_output_report,
|
||||
.max_buffer_size = UHID_DATA_MAX,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(uhid_hid_driver);
|
||||
|
||||
|
||||
@@ -485,10 +485,10 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *attr,
|
||||
val = (temp - val) / 1000;
|
||||
|
||||
if (sattr->index != 1) {
|
||||
data->temp[HYSTERSIS][sattr->index] &= 0xF0;
|
||||
data->temp[HYSTERSIS][sattr->index] &= 0x0F;
|
||||
data->temp[HYSTERSIS][sattr->index] |= (val & 0xF) << 4;
|
||||
} else {
|
||||
data->temp[HYSTERSIS][sattr->index] &= 0x0F;
|
||||
data->temp[HYSTERSIS][sattr->index] &= 0xF0;
|
||||
data->temp[HYSTERSIS][sattr->index] |= (val & 0xF);
|
||||
}
|
||||
|
||||
@@ -554,11 +554,11 @@ static ssize_t show_temp_st(struct device *dev, struct device_attribute *attr,
|
||||
val = data->enh_acoustics[0] & 0xf;
|
||||
break;
|
||||
case 1:
|
||||
val = (data->enh_acoustics[1] >> 4) & 0xf;
|
||||
val = data->enh_acoustics[1] & 0xf;
|
||||
break;
|
||||
case 2:
|
||||
default:
|
||||
val = data->enh_acoustics[1] & 0xf;
|
||||
val = (data->enh_acoustics[1] >> 4) & 0xf;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -780,6 +780,7 @@ static int xgene_hwmon_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct xgene_hwmon_dev *ctx = platform_get_drvdata(pdev);
|
||||
|
||||
cancel_work_sync(&ctx->workq);
|
||||
hwmon_device_unregister(ctx->hwmon_dev);
|
||||
kfifo_free(&ctx->async_msg_fifo);
|
||||
if (acpi_disabled)
|
||||
|
||||
@@ -492,7 +492,7 @@ static enum m5mols_restype __find_restype(u32 code)
|
||||
do {
|
||||
if (code == m5mols_default_ffmt[type].code)
|
||||
return type;
|
||||
} while (type++ != SIZE_DEFAULT_FFMT);
|
||||
} while (++type != SIZE_DEFAULT_FFMT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1857,7 +1857,6 @@ static void atmci_tasklet_func(unsigned long priv)
|
||||
atmci_writel(host, ATMCI_IER, ATMCI_NOTBUSY);
|
||||
state = STATE_WAITING_NOTBUSY;
|
||||
} else if (host->mrq->stop) {
|
||||
atmci_writel(host, ATMCI_IER, ATMCI_CMDRDY);
|
||||
atmci_send_stop_cmd(host, data);
|
||||
state = STATE_SENDING_STOP;
|
||||
} else {
|
||||
@@ -1890,8 +1889,6 @@ static void atmci_tasklet_func(unsigned long priv)
|
||||
* command to send.
|
||||
*/
|
||||
if (host->mrq->stop) {
|
||||
atmci_writel(host, ATMCI_IER,
|
||||
ATMCI_CMDRDY);
|
||||
atmci_send_stop_cmd(host, data);
|
||||
state = STATE_SENDING_STOP;
|
||||
} else {
|
||||
|
||||
@@ -4062,6 +4062,11 @@ static int qed_init_wfq_param(struct qed_hwfn *p_hwfn,
|
||||
|
||||
num_vports = p_hwfn->qm_info.num_vports;
|
||||
|
||||
if (num_vports < 2) {
|
||||
DP_NOTICE(p_hwfn, "Unexpected num_vports: %d\n", num_vports);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Accounting for the vports which are configured for WFQ explicitly */
|
||||
for (i = 0; i < num_vports; i++) {
|
||||
u32 tmp_speed;
|
||||
|
||||
@@ -291,6 +291,9 @@ static int vsw_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||
|
||||
hp = mdesc_grab();
|
||||
|
||||
if (!hp)
|
||||
return -ENODEV;
|
||||
|
||||
rmac = mdesc_get_property(hp, vdev->mp, remote_macaddr_prop, &len);
|
||||
err = -ENODEV;
|
||||
if (!rmac) {
|
||||
|
||||
@@ -432,6 +432,9 @@ static int vnet_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||
|
||||
hp = mdesc_grab();
|
||||
|
||||
if (!hp)
|
||||
return -ENODEV;
|
||||
|
||||
vp = vnet_find_parent(hp, vdev->mp, vdev);
|
||||
if (IS_ERR(vp)) {
|
||||
pr_err("Cannot find port parent vnet\n");
|
||||
|
||||
@@ -112,8 +112,11 @@ static int lan911x_config_init(struct phy_device *phydev)
|
||||
static int lan87xx_read_status(struct phy_device *phydev)
|
||||
{
|
||||
struct smsc_phy_priv *priv = phydev->priv;
|
||||
int err;
|
||||
|
||||
int err = genphy_read_status(phydev);
|
||||
err = genphy_read_status(phydev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!phydev->link && priv->energy_enable) {
|
||||
int i;
|
||||
|
||||
@@ -2213,6 +2213,13 @@ static int smsc75xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
size = (rx_cmd_a & RX_CMD_A_LEN) - RXW_PADDING;
|
||||
align_count = (4 - ((size + RXW_PADDING) % 4)) % 4;
|
||||
|
||||
if (unlikely(size > skb->len)) {
|
||||
netif_dbg(dev, rx_err, dev->net,
|
||||
"size err rx_cmd_a=0x%08x\n",
|
||||
rx_cmd_a);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (unlikely(rx_cmd_a & RX_CMD_A_RED)) {
|
||||
netif_dbg(dev, rx_err, dev->net,
|
||||
"Error rx_cmd_a=0x%08x\n", rx_cmd_a);
|
||||
|
||||
@@ -187,6 +187,7 @@ static int pn533_usb_send_frame(struct pn533 *dev,
|
||||
print_hex_dump_debug("PN533 TX: ", DUMP_PREFIX_NONE, 16, 1,
|
||||
out->data, out->len, false);
|
||||
|
||||
arg.phy = phy;
|
||||
init_completion(&arg.done);
|
||||
cntx = phy->out_urb->context;
|
||||
phy->out_urb->context = &arg;
|
||||
|
||||
@@ -297,13 +297,15 @@ EXPORT_SYMBOL(ndlc_probe);
|
||||
|
||||
void ndlc_remove(struct llt_ndlc *ndlc)
|
||||
{
|
||||
st_nci_remove(ndlc->ndev);
|
||||
|
||||
/* cancel timers */
|
||||
del_timer_sync(&ndlc->t1_timer);
|
||||
del_timer_sync(&ndlc->t2_timer);
|
||||
ndlc->t2_active = false;
|
||||
ndlc->t1_active = false;
|
||||
/* cancel work */
|
||||
cancel_work_sync(&ndlc->sm_work);
|
||||
|
||||
st_nci_remove(ndlc->ndev);
|
||||
|
||||
skb_queue_purge(&ndlc->rcv_q);
|
||||
skb_queue_purge(&ndlc->send_q);
|
||||
|
||||
@@ -528,8 +528,10 @@ static void __nvmet_req_complete(struct nvmet_req *req, u16 status)
|
||||
|
||||
void nvmet_req_complete(struct nvmet_req *req, u16 status)
|
||||
{
|
||||
struct nvmet_sq *sq = req->sq;
|
||||
|
||||
__nvmet_req_complete(req, status);
|
||||
percpu_ref_put(&req->sq->ref);
|
||||
percpu_ref_put(&sq->ref);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvmet_req_complete);
|
||||
|
||||
|
||||
@@ -102,8 +102,8 @@ static int serial8250_em_probe(struct platform_device *pdev)
|
||||
memset(&up, 0, sizeof(up));
|
||||
up.port.mapbase = regs->start;
|
||||
up.port.irq = irq->start;
|
||||
up.port.type = PORT_UNKNOWN;
|
||||
up.port.flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_IOREMAP;
|
||||
up.port.type = PORT_16750;
|
||||
up.port.flags = UPF_FIXED_PORT | UPF_IOREMAP | UPF_FIXED_TYPE;
|
||||
up.port.dev = &pdev->dev;
|
||||
up.port.private_data = priv;
|
||||
|
||||
|
||||
@@ -921,6 +921,28 @@ SETUP_HCRX(struct stifb_info *fb)
|
||||
|
||||
/* ------------------- driver specific functions --------------------------- */
|
||||
|
||||
static int
|
||||
stifb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
struct stifb_info *fb = container_of(info, struct stifb_info, info);
|
||||
|
||||
if (var->xres != fb->info.var.xres ||
|
||||
var->yres != fb->info.var.yres ||
|
||||
var->bits_per_pixel != fb->info.var.bits_per_pixel)
|
||||
return -EINVAL;
|
||||
|
||||
var->xres_virtual = var->xres;
|
||||
var->yres_virtual = var->yres;
|
||||
var->xoffset = 0;
|
||||
var->yoffset = 0;
|
||||
var->grayscale = fb->info.var.grayscale;
|
||||
var->red.length = fb->info.var.red.length;
|
||||
var->green.length = fb->info.var.green.length;
|
||||
var->blue.length = fb->info.var.blue.length;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
stifb_setcolreg(u_int regno, u_int red, u_int green,
|
||||
u_int blue, u_int transp, struct fb_info *info)
|
||||
@@ -1103,6 +1125,7 @@ stifb_init_display(struct stifb_info *fb)
|
||||
|
||||
static struct fb_ops stifb_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.fb_check_var = stifb_check_var,
|
||||
.fb_setcolreg = stifb_setcolreg,
|
||||
.fb_blank = stifb_blank,
|
||||
.fb_fillrect = cfb_fillrect,
|
||||
@@ -1122,6 +1145,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
||||
struct stifb_info *fb;
|
||||
struct fb_info *info;
|
||||
unsigned long sti_rom_address;
|
||||
char modestr[32];
|
||||
char *dev_name;
|
||||
int bpp, xres, yres;
|
||||
|
||||
@@ -1300,6 +1324,9 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
||||
info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA;
|
||||
info->pseudo_palette = &fb->pseudo_palette;
|
||||
|
||||
scnprintf(modestr, sizeof(modestr), "%dx%d-%d", xres, yres, bpp);
|
||||
fb_find_mode(&info->var, info, modestr, NULL, 0, NULL, bpp);
|
||||
|
||||
/* This has to be done !!! */
|
||||
if (fb_alloc_cmap(&info->cmap, NR_PALETTE, 0))
|
||||
goto out_err1;
|
||||
|
||||
+8
-10
@@ -5021,13 +5021,6 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
|
||||
goto bad_inode;
|
||||
raw_inode = ext4_raw_inode(&iloc);
|
||||
|
||||
if ((ino == EXT4_ROOT_INO) && (raw_inode->i_links_count == 0)) {
|
||||
ext4_error_inode(inode, function, line, 0,
|
||||
"iget: root inode unallocated");
|
||||
ret = -EFSCORRUPTED;
|
||||
goto bad_inode;
|
||||
}
|
||||
|
||||
if ((flags & EXT4_IGET_HANDLE) &&
|
||||
(raw_inode->i_links_count == 0) && (raw_inode->i_mode == 0)) {
|
||||
ret = -ESTALE;
|
||||
@@ -5098,11 +5091,16 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
|
||||
* NeilBrown 1999oct15
|
||||
*/
|
||||
if (inode->i_nlink == 0) {
|
||||
if ((inode->i_mode == 0 ||
|
||||
if ((inode->i_mode == 0 || flags & EXT4_IGET_SPECIAL ||
|
||||
!(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) &&
|
||||
ino != EXT4_BOOT_LOADER_INO) {
|
||||
/* this inode is deleted */
|
||||
ret = -ESTALE;
|
||||
/* this inode is deleted or unallocated */
|
||||
if (flags & EXT4_IGET_SPECIAL) {
|
||||
ext4_error_inode(inode, function, line, 0,
|
||||
"iget: special inode unallocated");
|
||||
ret = -EFSCORRUPTED;
|
||||
} else
|
||||
ret = -ESTALE;
|
||||
goto bad_inode;
|
||||
}
|
||||
/* The only unlinked inodes we let through here have
|
||||
|
||||
+6
-4
@@ -381,7 +381,8 @@ static int io_submit_init_bio(struct ext4_io_submit *io,
|
||||
|
||||
static int io_submit_add_bh(struct ext4_io_submit *io,
|
||||
struct inode *inode,
|
||||
struct page *page,
|
||||
struct page *pagecache_page,
|
||||
struct page *bounce_page,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
int ret;
|
||||
@@ -397,10 +398,11 @@ submit_and_retry:
|
||||
return ret;
|
||||
io->io_bio->bi_write_hint = inode->i_write_hint;
|
||||
}
|
||||
ret = bio_add_page(io->io_bio, page, bh->b_size, bh_offset(bh));
|
||||
ret = bio_add_page(io->io_bio, bounce_page ?: pagecache_page,
|
||||
bh->b_size, bh_offset(bh));
|
||||
if (ret != bh->b_size)
|
||||
goto submit_and_retry;
|
||||
wbc_account_io(io->io_wbc, page, bh->b_size);
|
||||
wbc_account_io(io->io_wbc, pagecache_page, bh->b_size);
|
||||
io->io_next_block++;
|
||||
return 0;
|
||||
}
|
||||
@@ -507,7 +509,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
|
||||
do {
|
||||
if (!buffer_async_write(bh))
|
||||
continue;
|
||||
ret = io_submit_add_bh(io, inode, bounce_page ?: page, bh);
|
||||
ret = io_submit_add_bh(io, inode, page, bounce_page, bh);
|
||||
if (ret) {
|
||||
/*
|
||||
* We only get here on ENOMEM. Not much else
|
||||
|
||||
@@ -384,6 +384,17 @@ static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino,
|
||||
struct inode *inode;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* We have to check for this corruption early as otherwise
|
||||
* iget_locked() could wait indefinitely for the state of our
|
||||
* parent inode.
|
||||
*/
|
||||
if (parent->i_ino == ea_ino) {
|
||||
ext4_error(parent->i_sb,
|
||||
"Parent and EA inode have the same ino %lu", ea_ino);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
inode = ext4_iget(parent->i_sb, ea_ino, EXT4_IGET_NORMAL);
|
||||
if (IS_ERR(inode)) {
|
||||
err = PTR_ERR(inode);
|
||||
|
||||
+7
-8
@@ -137,19 +137,18 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
|
||||
struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
|
||||
struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
|
||||
pgoff_t index = pos >> PAGE_SHIFT;
|
||||
uint32_t pageofs = index << PAGE_SHIFT;
|
||||
int ret = 0;
|
||||
|
||||
jffs2_dbg(1, "%s()\n", __func__);
|
||||
|
||||
if (pageofs > inode->i_size) {
|
||||
/* Make new hole frag from old EOF to new page */
|
||||
if (pos > inode->i_size) {
|
||||
/* Make new hole frag from old EOF to new position */
|
||||
struct jffs2_raw_inode ri;
|
||||
struct jffs2_full_dnode *fn;
|
||||
uint32_t alloc_len;
|
||||
|
||||
jffs2_dbg(1, "Writing new hole frag 0x%x-0x%x between current EOF and new page\n",
|
||||
(unsigned int)inode->i_size, pageofs);
|
||||
jffs2_dbg(1, "Writing new hole frag 0x%x-0x%x between current EOF and new position\n",
|
||||
(unsigned int)inode->i_size, (uint32_t)pos);
|
||||
|
||||
ret = jffs2_reserve_space(c, sizeof(ri), &alloc_len,
|
||||
ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
|
||||
@@ -169,10 +168,10 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
|
||||
ri.mode = cpu_to_jemode(inode->i_mode);
|
||||
ri.uid = cpu_to_je16(i_uid_read(inode));
|
||||
ri.gid = cpu_to_je16(i_gid_read(inode));
|
||||
ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs));
|
||||
ri.isize = cpu_to_je32((uint32_t)pos);
|
||||
ri.atime = ri.ctime = ri.mtime = cpu_to_je32(JFFS2_NOW());
|
||||
ri.offset = cpu_to_je32(inode->i_size);
|
||||
ri.dsize = cpu_to_je32(pageofs - inode->i_size);
|
||||
ri.dsize = cpu_to_je32((uint32_t)pos - inode->i_size);
|
||||
ri.csize = cpu_to_je32(0);
|
||||
ri.compr = JFFS2_COMPR_ZERO;
|
||||
ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
|
||||
@@ -202,7 +201,7 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
|
||||
goto out_err;
|
||||
}
|
||||
jffs2_complete_reservation(c);
|
||||
inode->i_size = pageofs;
|
||||
inode->i_size = pos;
|
||||
mutex_unlock(&f->sem);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -601,7 +601,7 @@ int sysfs_emit_at(char *buf, int at, const char *fmt, ...)
|
||||
va_list args;
|
||||
int len;
|
||||
|
||||
if (WARN(!buf || offset_in_page(buf) || at < 0 || at >= PAGE_SIZE,
|
||||
if (WARN(!buf || at < 0 || at >= PAGE_SIZE,
|
||||
"invalid sysfs_emit_at: buf:%p at:%d\n", buf, at))
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -799,6 +799,7 @@ struct hid_driver {
|
||||
* @raw_request: send raw report request to device (e.g. feature report)
|
||||
* @output_report: send output report to device
|
||||
* @idle: send idle request to device
|
||||
* @max_buffer_size: over-ride maximum data buffer size (default: HID_MAX_BUFFER_SIZE)
|
||||
*/
|
||||
struct hid_ll_driver {
|
||||
int (*start)(struct hid_device *hdev);
|
||||
@@ -823,6 +824,8 @@ struct hid_ll_driver {
|
||||
int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len);
|
||||
|
||||
int (*idle)(struct hid_device *hdev, int report, int idle, int reqtype);
|
||||
|
||||
unsigned int max_buffer_size;
|
||||
};
|
||||
|
||||
extern struct hid_ll_driver i2c_hid_ll_driver;
|
||||
|
||||
@@ -261,9 +261,11 @@ struct hh_cache {
|
||||
* relationship HH alignment <= LL alignment.
|
||||
*/
|
||||
#define LL_RESERVED_SPACE(dev) \
|
||||
((((dev)->hard_header_len+(dev)->needed_headroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
((((dev)->hard_header_len + READ_ONCE((dev)->needed_headroom)) \
|
||||
& ~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
#define LL_RESERVED_SPACE_EXTRA(dev,extra) \
|
||||
((((dev)->hard_header_len+(dev)->needed_headroom+(extra))&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
((((dev)->hard_header_len + READ_ONCE((dev)->needed_headroom) + (extra)) \
|
||||
& ~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
|
||||
struct header_ops {
|
||||
int (*create) (struct sk_buff *skb, struct net_device *dev,
|
||||
|
||||
@@ -97,7 +97,10 @@ struct intc_hw_desc {
|
||||
unsigned int nr_subgroups;
|
||||
};
|
||||
|
||||
#define _INTC_ARRAY(a) a, __same_type(a, NULL) ? 0 : sizeof(a)/sizeof(*a)
|
||||
#define _INTC_SIZEOF_OR_ZERO(a) (_Generic(a, \
|
||||
typeof(NULL): 0, \
|
||||
default: sizeof(a)))
|
||||
#define _INTC_ARRAY(a) a, _INTC_SIZEOF_OR_ZERO(a)/sizeof(*a)
|
||||
|
||||
#define INTC_HW_DESC(vectors, groups, mask_regs, \
|
||||
prio_regs, sense_regs, ack_regs) \
|
||||
|
||||
@@ -233,12 +233,11 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
|
||||
* not add unwanted padding between the beginning of the section and the
|
||||
* structure. Force alignment to the same alignment as the section start.
|
||||
*
|
||||
* When lockdep is enabled, we make sure to always do the RCU portions of
|
||||
* the tracepoint code, regardless of whether tracing is on. However,
|
||||
* don't check if the condition is false, due to interaction with idle
|
||||
* instrumentation. This lets us find RCU issues triggered with tracepoints
|
||||
* even when this tracepoint is off. This code has no purpose other than
|
||||
* poking RCU a bit.
|
||||
* When lockdep is enabled, we make sure to always test if RCU is
|
||||
* "watching" regardless if the tracepoint is enabled or not. Tracepoints
|
||||
* require RCU to be active, and it should always warn at the tracepoint
|
||||
* site if it is not watching, as it will need to be active when the
|
||||
* tracepoint is enabled.
|
||||
*/
|
||||
#define __DECLARE_TRACE(name, proto, args, cond, data_proto, data_args) \
|
||||
extern struct tracepoint __tracepoint_##name; \
|
||||
@@ -250,9 +249,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
|
||||
TP_ARGS(data_args), \
|
||||
TP_CONDITION(cond), 0); \
|
||||
if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) { \
|
||||
rcu_read_lock_sched_notrace(); \
|
||||
rcu_dereference_sched(__tracepoint_##name.funcs);\
|
||||
rcu_read_unlock_sched_notrace(); \
|
||||
WARN_ON_ONCE(!rcu_is_watching()); \
|
||||
} \
|
||||
} \
|
||||
__DECLARE_TRACE_RCU(name, PARAMS(proto), PARAMS(args), \
|
||||
|
||||
@@ -1582,7 +1582,8 @@ unsigned long ftrace_location_range(unsigned long start, unsigned long end)
|
||||
key.flags = end; /* overload flags, as it is unsigned long */
|
||||
|
||||
for (pg = ftrace_pages_start; pg; pg = pg->next) {
|
||||
if (end < pg->records[0].ip ||
|
||||
if (pg->index == 0 ||
|
||||
end < pg->records[0].ip ||
|
||||
start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE))
|
||||
continue;
|
||||
rec = bsearch(&key, pg->records, pg->index,
|
||||
|
||||
@@ -1764,6 +1764,9 @@ static const char *hist_field_name(struct hist_field *field,
|
||||
{
|
||||
const char *field_name = "";
|
||||
|
||||
if (WARN_ON_ONCE(!field))
|
||||
return field_name;
|
||||
|
||||
if (level > 1)
|
||||
return field_name;
|
||||
|
||||
|
||||
@@ -557,6 +557,9 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt,
|
||||
cfg->fc_scope = RT_SCOPE_UNIVERSE;
|
||||
}
|
||||
|
||||
if (!cfg->fc_table)
|
||||
cfg->fc_table = RT_TABLE_MAIN;
|
||||
|
||||
if (cmd == SIOCDELRT)
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -609,10 +609,10 @@ void ip_md_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, u8 proto)
|
||||
else if (skb->protocol == htons(ETH_P_IP))
|
||||
df = inner_iph->frag_off & htons(IP_DF);
|
||||
headroom += LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len;
|
||||
if (headroom > dev->needed_headroom)
|
||||
dev->needed_headroom = headroom;
|
||||
if (headroom > READ_ONCE(dev->needed_headroom))
|
||||
WRITE_ONCE(dev->needed_headroom, headroom);
|
||||
|
||||
if (skb_cow_head(skb, dev->needed_headroom)) {
|
||||
if (skb_cow_head(skb, READ_ONCE(dev->needed_headroom))) {
|
||||
ip_rt_put(rt);
|
||||
goto tx_dropped;
|
||||
}
|
||||
@@ -777,10 +777,10 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
|
||||
max_headroom = LL_RESERVED_SPACE(rt->dst.dev) + sizeof(struct iphdr)
|
||||
+ rt->dst.header_len + ip_encap_hlen(&tunnel->encap);
|
||||
if (max_headroom > dev->needed_headroom)
|
||||
dev->needed_headroom = max_headroom;
|
||||
if (max_headroom > READ_ONCE(dev->needed_headroom))
|
||||
WRITE_ONCE(dev->needed_headroom, max_headroom);
|
||||
|
||||
if (skb_cow_head(skb, dev->needed_headroom)) {
|
||||
if (skb_cow_head(skb, READ_ONCE(dev->needed_headroom))) {
|
||||
ip_rt_put(rt);
|
||||
dev->stats.tx_dropped++;
|
||||
kfree_skb(skb);
|
||||
|
||||
@@ -3307,7 +3307,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
|
||||
th->window = htons(min(req->rsk_rcv_wnd, 65535U));
|
||||
tcp_options_write((__be32 *)(th + 1), NULL, &opts);
|
||||
th->doff = (tcp_header_size >> 2);
|
||||
__TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS);
|
||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS);
|
||||
|
||||
#ifdef CONFIG_TCP_MD5SIG
|
||||
/* Okay, we have all we need - do the md5 hash if needed */
|
||||
|
||||
@@ -1206,8 +1206,8 @@ route_lookup:
|
||||
*/
|
||||
max_headroom = LL_RESERVED_SPACE(dst->dev) + sizeof(struct ipv6hdr)
|
||||
+ dst->header_len + t->hlen;
|
||||
if (max_headroom > dev->needed_headroom)
|
||||
dev->needed_headroom = max_headroom;
|
||||
if (max_headroom > READ_ONCE(dev->needed_headroom))
|
||||
WRITE_ONCE(dev->needed_headroom, max_headroom);
|
||||
|
||||
err = ip6_tnl_encap(skb, t, &proto, fl6);
|
||||
if (err)
|
||||
|
||||
+1
-1
@@ -119,7 +119,7 @@ struct iucv_irq_data {
|
||||
u16 ippathid;
|
||||
u8 ipflags1;
|
||||
u8 iptype;
|
||||
u32 res2[8];
|
||||
u32 res2[9];
|
||||
};
|
||||
|
||||
struct iucv_irq_list {
|
||||
|
||||
Reference in new issue
Block a user