mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
This is the 5.4.51 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl8GyVUACgkQONu9yGCS aT6MCBAAxQpPQYQ8XNq40G2U3rENx2gIOgSA9WjkGsCij6Ad8VjkbA2KqqJ6v0GF McIomgdR+bviZKYPJHfdVlOGWGGTtDe1hi6GVoXuc/CTOPK386/v/vMTumdQ2bLb 5fkuvpFGNdxGmhi+Vpu6zajvF8CVHmCggQQGlrIyIIOXPwN/DB/7XK6lmtx0vcff YYZI3L1+q1rJz6vV5K5xTwpPwCQDsdYW93KQpcccVKMAmnAzFolaWyvWitvqOgT5 xrnelzjrIy5v2BST0S7jL0nzEeXB6bq1tmJHbd+cTvIaKJx4NR8yx2cXzvospi3l TpwuycBo/0LRWAiFZ+29+HOHkvUx7sa+BFCLiZEu1dLAxRXdi/W0a/i0QFGb0ex/ YO8dBVEdHVRm0aXlfnipJYuNdTxzSzUG0GHOvZB11h/zxybiLWjJGutofX0tZXYj JuO9UhP0eSldtfuATrXRPsSsTWWen1igVTWFVHEZPWGvR4TiU8jpFPOTFcrraglM 07M3ooA6FlWrTt7n9YdGLaQY6w2z+pREMgnUesNY9yQeRxY2EAsa95Lu+Y6aTeYP YfTPQHhbbz3XggFljGYIbvM6wlzgghSLH09CX8zxFqeYyTSFsNDKBuLslmTMS/21 zwpG81hm7fE58N3uUHqSU3/bN8kzCH6GsU78bFAXb+jaNKgG5Qg= =0uVY -----END PGP SIGNATURE----- Merge 5.4.51 into android11-5.4 Changes in 5.4.51 io_uring: make sure async workqueue is canceled on exit mm: fix swap cache node allocation mask EDAC/amd64: Read back the scrub rate PCI register on F15h usbnet: smsc95xx: Fix use-after-free after removal sched/debug: Make sd->flags sysctl read-only mm/slub.c: fix corrupted freechain in deactivate_slab() mm/slub: fix stack overruns with SLUB_STATS rxrpc: Fix race between incoming ACK parser and retransmitter usb: usbtest: fix missing kfree(dev->buf) in usbtest_disconnect tools lib traceevent: Add append() function helper for appending strings tools lib traceevent: Handle __attribute__((user)) in field names s390/debug: avoid kernel warning on too large number of pages nvme-multipath: set bdi capabilities once nvme-multipath: fix deadlock between ana_work and scan_work nvme-multipath: fix deadlock due to head->lock nvme-multipath: fix bogus request queue reference put kgdb: Avoid suspicious RCU usage warning selftests: tpm: Use /bin/sh instead of /bin/bash tpm: Fix TIS locality timeout problems crypto: af_alg - fix use-after-free in af_alg_accept() due to bh_lock_sock() drm/msm/dpu: fix error return code in dpu_encoder_init rxrpc: Fix afs large storage transmission performance drop RDMA/counter: Query a counter before release cxgb4: use unaligned conversion for fetching timestamp cxgb4: parse TC-U32 key values and masks natively cxgb4: fix endian conversions for L4 ports in filters cxgb4: use correct type for all-mask IP address comparison cxgb4: fix SGE queue dump destination buffer context hwmon: (max6697) Make sure the OVERT mask is set correctly hwmon: (acpi_power_meter) Fix potential memory leak in acpi_power_meter_add() thermal/drivers/mediatek: Fix bank number settings on mt8183 thermal/drivers/rcar_gen3: Fix undefined temperature if negative nfsd4: fix nfsdfs reference count loop nfsd: fix nfsdfs inode reference count leak drm: sun4i: hdmi: Remove extra HPD polling virtio-blk: free vblk-vqs in error path of virtblk_probe() SMB3: Honor 'posix' flag for multiuser mounts nvme: fix identify error status silent ignore nvme: fix a crash in nvme_mpath_add_disk samples/vfs: avoid warning in statx override i2c: algo-pca: Add 0x78 as SCL stuck low status for PCA9665 i2c: mlxcpld: check correct size of maximum RECV_LEN packet spi: spi-fsl-dspi: Fix external abort on interrupt in resume or exit paths nfsd: apply umask on fs without ACL support Revert "ALSA: usb-audio: Improve frames size computation" SMB3: Honor 'seal' flag for multiuser mounts SMB3: Honor persistent/resilient handle flags for multiuser mounts SMB3: Honor lease disabling for multiuser mounts SMB3: Honor 'handletimeout' flag for multiuser mounts cifs: Fix the target file was deleted when rename failed. MIPS: lantiq: xway: sysctrl: fix the GPHY clock alias names MIPS: Add missing EHB in mtc0 -> mfc0 sequence for DSPen drm/amd/display: Only revalidate bandwidth on medium and fast updates drm/amdgpu: use %u rather than %d for sclk/mclk drm/amdgpu/atomfirmware: fix vram_info fetching for renoir dma-buf: Move dma_buf_release() from fops to dentry_ops irqchip/gic: Atomically update affinity mm, compaction: fully assume capture is not NULL in compact_zone_order() mm, compaction: make capture control handling safe wrt interrupts x86/resctrl: Fix memory bandwidth counter width for AMD dm zoned: assign max_io_len correctly efi: Make it possible to disable efivar_ssdt entirely Linux 5.4.51 Signed-off-by: Greg Kroah-Hartman <[email protected]> Change-Id: Ib29e1b61540451995ee757cf90c9ba24e6b8d6b3
This commit is contained in:
commit
4022b5a85f
66 changed files with 559 additions and 360 deletions
|
|
@ -5281,9 +5281,15 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
|
|||
vol_info->nocase = master_tcon->nocase;
|
||||
vol_info->nohandlecache = master_tcon->nohandlecache;
|
||||
vol_info->local_lease = master_tcon->local_lease;
|
||||
vol_info->no_lease = master_tcon->no_lease;
|
||||
vol_info->resilient = master_tcon->use_resilient;
|
||||
vol_info->persistent = master_tcon->use_persistent;
|
||||
vol_info->handle_timeout = master_tcon->handle_timeout;
|
||||
vol_info->no_linux_ext = !master_tcon->unix_ext;
|
||||
vol_info->linux_ext = master_tcon->posix_extensions;
|
||||
vol_info->sectype = master_tcon->ses->sectype;
|
||||
vol_info->sign = master_tcon->ses->sign;
|
||||
vol_info->seal = master_tcon->seal;
|
||||
|
||||
rc = cifs_set_vol_auth(vol_info, master_tcon->ses);
|
||||
if (rc) {
|
||||
|
|
@ -5309,10 +5315,6 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* if new SMB3.11 POSIX extensions are supported do not remap / and \ */
|
||||
if (tcon->posix_extensions)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_POSIX_PATHS;
|
||||
|
||||
if (cap_unix(ses))
|
||||
reset_cifs_unix_caps(0, tcon, NULL, vol_info);
|
||||
|
||||
|
|
|
|||
|
|
@ -1791,6 +1791,7 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
|
|||
FILE_UNIX_BASIC_INFO *info_buf_target;
|
||||
unsigned int xid;
|
||||
int rc, tmprc;
|
||||
bool new_target = d_really_is_negative(target_dentry);
|
||||
|
||||
if (flags & ~RENAME_NOREPLACE)
|
||||
return -EINVAL;
|
||||
|
|
@ -1867,8 +1868,13 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
|
|||
*/
|
||||
|
||||
unlink_target:
|
||||
/* Try unlinking the target dentry if it's not negative */
|
||||
if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) {
|
||||
/*
|
||||
* If the target dentry was created during the rename, try
|
||||
* unlinking it if it's not negative
|
||||
*/
|
||||
if (new_target &&
|
||||
d_really_is_positive(target_dentry) &&
|
||||
(rc == -EACCES || rc == -EEXIST)) {
|
||||
if (d_is_dir(target_dentry))
|
||||
tmprc = cifs_rmdir(target_dir, target_dentry);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -267,6 +267,9 @@ struct io_ring_ctx {
|
|||
#if defined(CONFIG_UNIX)
|
||||
struct socket *ring_sock;
|
||||
#endif
|
||||
|
||||
struct list_head task_list;
|
||||
spinlock_t task_lock;
|
||||
};
|
||||
|
||||
struct sqe_submit {
|
||||
|
|
@ -331,14 +334,18 @@ struct io_kiocb {
|
|||
#define REQ_F_ISREG 2048 /* regular file */
|
||||
#define REQ_F_MUST_PUNT 4096 /* must be punted even for NONBLOCK */
|
||||
#define REQ_F_TIMEOUT_NOSEQ 8192 /* no timeout sequence */
|
||||
#define REQ_F_CANCEL 16384 /* cancel request */
|
||||
unsigned long fsize;
|
||||
u64 user_data;
|
||||
u32 result;
|
||||
u32 sequence;
|
||||
struct task_struct *task;
|
||||
|
||||
struct fs_struct *fs;
|
||||
|
||||
struct work_struct work;
|
||||
struct task_struct *work_task;
|
||||
struct list_head task_list;
|
||||
};
|
||||
|
||||
#define IO_PLUG_THRESHOLD 2
|
||||
|
|
@ -425,6 +432,8 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
|
|||
INIT_LIST_HEAD(&ctx->cancel_list);
|
||||
INIT_LIST_HEAD(&ctx->defer_list);
|
||||
INIT_LIST_HEAD(&ctx->timeout_list);
|
||||
INIT_LIST_HEAD(&ctx->task_list);
|
||||
spin_lock_init(&ctx->task_lock);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
|
@ -492,6 +501,7 @@ static void __io_commit_cqring(struct io_ring_ctx *ctx)
|
|||
static inline void io_queue_async_work(struct io_ring_ctx *ctx,
|
||||
struct io_kiocb *req)
|
||||
{
|
||||
unsigned long flags;
|
||||
int rw = 0;
|
||||
|
||||
if (req->submit.sqe) {
|
||||
|
|
@ -503,6 +513,13 @@ static inline void io_queue_async_work(struct io_ring_ctx *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
req->task = current;
|
||||
|
||||
spin_lock_irqsave(&ctx->task_lock, flags);
|
||||
list_add(&req->task_list, &ctx->task_list);
|
||||
req->work_task = NULL;
|
||||
spin_unlock_irqrestore(&ctx->task_lock, flags);
|
||||
|
||||
queue_work(ctx->sqo_wq[rw], &req->work);
|
||||
}
|
||||
|
||||
|
|
@ -2201,6 +2218,8 @@ static void io_sq_wq_submit_work(struct work_struct *work)
|
|||
|
||||
old_cred = override_creds(ctx->creds);
|
||||
async_list = io_async_list_from_sqe(ctx, req->submit.sqe);
|
||||
|
||||
allow_kernel_signal(SIGINT);
|
||||
restart:
|
||||
do {
|
||||
struct sqe_submit *s = &req->submit;
|
||||
|
|
@ -2232,6 +2251,12 @@ restart:
|
|||
}
|
||||
|
||||
if (!ret) {
|
||||
req->work_task = current;
|
||||
if (req->flags & REQ_F_CANCEL) {
|
||||
ret = -ECANCELED;
|
||||
goto end_req;
|
||||
}
|
||||
|
||||
s->has_user = cur_mm != NULL;
|
||||
s->needs_lock = true;
|
||||
do {
|
||||
|
|
@ -2246,6 +2271,12 @@ restart:
|
|||
break;
|
||||
cond_resched();
|
||||
} while (1);
|
||||
end_req:
|
||||
if (!list_empty(&req->task_list)) {
|
||||
spin_lock_irq(&ctx->task_lock);
|
||||
list_del_init(&req->task_list);
|
||||
spin_unlock_irq(&ctx->task_lock);
|
||||
}
|
||||
}
|
||||
|
||||
/* drop submission reference */
|
||||
|
|
@ -2311,6 +2342,7 @@ restart:
|
|||
}
|
||||
|
||||
out:
|
||||
disallow_signal(SIGINT);
|
||||
if (cur_mm) {
|
||||
set_fs(old_fs);
|
||||
unuse_mm(cur_mm);
|
||||
|
|
@ -3675,12 +3707,32 @@ static int io_uring_fasync(int fd, struct file *file, int on)
|
|||
return fasync_helper(fd, file, on, &ctx->cq_fasync);
|
||||
}
|
||||
|
||||
static void io_cancel_async_work(struct io_ring_ctx *ctx,
|
||||
struct task_struct *task)
|
||||
{
|
||||
if (list_empty(&ctx->task_list))
|
||||
return;
|
||||
|
||||
spin_lock_irq(&ctx->task_lock);
|
||||
while (!list_empty(&ctx->task_list)) {
|
||||
struct io_kiocb *req;
|
||||
|
||||
req = list_first_entry(&ctx->task_list, struct io_kiocb, task_list);
|
||||
list_del_init(&req->task_list);
|
||||
req->flags |= REQ_F_CANCEL;
|
||||
if (req->work_task && (!task || req->task == task))
|
||||
send_sig(SIGINT, req->work_task, 1);
|
||||
}
|
||||
spin_unlock_irq(&ctx->task_lock);
|
||||
}
|
||||
|
||||
static void io_ring_ctx_wait_and_kill(struct io_ring_ctx *ctx)
|
||||
{
|
||||
mutex_lock(&ctx->uring_lock);
|
||||
percpu_ref_kill(&ctx->refs);
|
||||
mutex_unlock(&ctx->uring_lock);
|
||||
|
||||
io_cancel_async_work(ctx, NULL);
|
||||
io_kill_timeouts(ctx);
|
||||
io_poll_remove_all(ctx);
|
||||
io_iopoll_reap_events(ctx);
|
||||
|
|
@ -3688,6 +3740,16 @@ static void io_ring_ctx_wait_and_kill(struct io_ring_ctx *ctx)
|
|||
io_ring_ctx_free(ctx);
|
||||
}
|
||||
|
||||
static int io_uring_flush(struct file *file, void *data)
|
||||
{
|
||||
struct io_ring_ctx *ctx = file->private_data;
|
||||
|
||||
if (fatal_signal_pending(current) || (current->flags & PF_EXITING))
|
||||
io_cancel_async_work(ctx, current);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int io_uring_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct io_ring_ctx *ctx = file->private_data;
|
||||
|
|
@ -3792,6 +3854,7 @@ out_fput:
|
|||
|
||||
static const struct file_operations io_uring_fops = {
|
||||
.release = io_uring_release,
|
||||
.flush = io_uring_flush,
|
||||
.mmap = io_uring_mmap,
|
||||
.poll = io_uring_poll,
|
||||
.fasync = io_uring_fasync,
|
||||
|
|
|
|||
|
|
@ -7705,9 +7705,14 @@ nfs4_state_start_net(struct net *net)
|
|||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
int ret;
|
||||
|
||||
ret = nfs4_state_create_net(net);
|
||||
ret = get_nfsdfs(net);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = nfs4_state_create_net(net);
|
||||
if (ret) {
|
||||
mntput(nn->nfsd_mnt);
|
||||
return ret;
|
||||
}
|
||||
locks_start_grace(net, &nn->nfsd4_manager);
|
||||
nfsd4_client_tracking_init(net);
|
||||
if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0)
|
||||
|
|
@ -7776,6 +7781,7 @@ nfs4_state_shutdown_net(struct net *net)
|
|||
|
||||
nfsd4_client_tracking_exit(net);
|
||||
nfs4_state_destroy_net(net);
|
||||
mntput(nn->nfsd_mnt);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -1335,6 +1335,7 @@ void nfsd_client_rmdir(struct dentry *dentry)
|
|||
WARN_ON_ONCE(ret);
|
||||
fsnotify_rmdir(dir, dentry);
|
||||
d_delete(dentry);
|
||||
dput(dentry);
|
||||
inode_unlock(dir);
|
||||
}
|
||||
|
||||
|
|
@ -1424,6 +1425,18 @@ static struct file_system_type nfsd_fs_type = {
|
|||
};
|
||||
MODULE_ALIAS_FS("nfsd");
|
||||
|
||||
int get_nfsdfs(struct net *net)
|
||||
{
|
||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
struct vfsmount *mnt;
|
||||
|
||||
mnt = vfs_kern_mount(&nfsd_fs_type, SB_KERNMOUNT, "nfsd", NULL);
|
||||
if (IS_ERR(mnt))
|
||||
return PTR_ERR(mnt);
|
||||
nn->nfsd_mnt = mnt;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
static int create_proc_exports_entry(void)
|
||||
{
|
||||
|
|
@ -1452,7 +1465,6 @@ unsigned int nfsd_net_id;
|
|||
static __net_init int nfsd_init_net(struct net *net)
|
||||
{
|
||||
int retval;
|
||||
struct vfsmount *mnt;
|
||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
|
||||
retval = nfsd_export_init(net);
|
||||
|
|
@ -1479,16 +1491,8 @@ static __net_init int nfsd_init_net(struct net *net)
|
|||
init_waitqueue_head(&nn->ntf_wq);
|
||||
seqlock_init(&nn->boot_lock);
|
||||
|
||||
mnt = vfs_kern_mount(&nfsd_fs_type, SB_KERNMOUNT, "nfsd", NULL);
|
||||
if (IS_ERR(mnt)) {
|
||||
retval = PTR_ERR(mnt);
|
||||
goto out_mount_err;
|
||||
}
|
||||
nn->nfsd_mnt = mnt;
|
||||
return 0;
|
||||
|
||||
out_mount_err:
|
||||
nfsd_reply_cache_shutdown(nn);
|
||||
out_drc_error:
|
||||
nfsd_idmap_shutdown(net);
|
||||
out_idmap_error:
|
||||
|
|
@ -1501,7 +1505,6 @@ static __net_exit void nfsd_exit_net(struct net *net)
|
|||
{
|
||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
|
||||
mntput(nn->nfsd_mnt);
|
||||
nfsd_reply_cache_shutdown(nn);
|
||||
nfsd_idmap_shutdown(net);
|
||||
nfsd_export_shutdown(net);
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ int nfsd_pool_stats_release(struct inode *, struct file *);
|
|||
|
||||
void nfsd_destroy(struct net *net);
|
||||
|
||||
int get_nfsdfs(struct net *);
|
||||
|
||||
struct nfsdfs_client {
|
||||
struct kref cl_ref;
|
||||
void (*cl_release)(struct kref *kref);
|
||||
|
|
@ -97,6 +99,7 @@ struct dentry *nfsd_client_mkdir(struct nfsd_net *nn,
|
|||
struct nfsdfs_client *ncl, u32 id, const struct tree_descr *);
|
||||
void nfsd_client_rmdir(struct dentry *dentry);
|
||||
|
||||
|
||||
#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
|
||||
#ifdef CONFIG_NFSD_V2_ACL
|
||||
extern const struct svc_version nfsd_acl_version2;
|
||||
|
|
|
|||
|
|
@ -1184,6 +1184,9 @@ nfsd_create_locked(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
|||
iap->ia_mode = 0;
|
||||
iap->ia_mode = (iap->ia_mode & S_IALLUGO) | type;
|
||||
|
||||
if (!IS_POSIXACL(dirp))
|
||||
iap->ia_mode &= ~current_umask();
|
||||
|
||||
err = 0;
|
||||
host_err = 0;
|
||||
switch (type) {
|
||||
|
|
@ -1416,6 +1419,9 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (!IS_POSIXACL(dirp))
|
||||
iap->ia_mode &= ~current_umask();
|
||||
|
||||
host_err = vfs_create(dirp, dchild, iap->ia_mode, true);
|
||||
if (host_err < 0) {
|
||||
fh_drop_write(fhp);
|
||||
|
|
|
|||
Loading…
Reference in a new issue