Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (55 commits) workqueue: mark init_workqueues() as early_initcall() workqueue: explain for_each_*cwq_cpu() iterators fscache: fix build on !CONFIG_SYSCTL slow-work: kill it gfs2: use workqueue instead of slow-work drm: use workqueue instead of slow-work cifs: use workqueue instead of slow-work fscache: drop references to slow-work fscache: convert operation to use workqueue instead of slow-work fscache: convert object to use workqueue instead of slow-work workqueue: fix how cpu number is stored in work->data workqueue: fix mayday_mask handling on UP workqueue: fix build problem on !CONFIG_SMP workqueue: fix locking in retry path of maybe_create_worker() async: use workqueue for worker pool workqueue: remove WQ_SINGLE_CPU and use WQ_UNBOUND instead workqueue: implement unbound workqueue workqueue: prepare for WQ_UNBOUND implementation libata: take advantage of cmwq and remove concurrency limitations workqueue: fix worker management invocation without pending works ... Fixed up conflicts in fs/cifs/* as per Tejun. Other trivial conflicts in include/linux/workqueue.h, kernel/trace/Kconfig and kernel/workqueue.c
This commit is contained in:
@@ -2307,8 +2307,7 @@ static void cifs_invalidate_page(struct page *page, unsigned long offset)
|
||||
cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
|
||||
}
|
||||
|
||||
static void
|
||||
cifs_oplock_break(struct slow_work *work)
|
||||
void cifs_oplock_break(struct work_struct *work)
|
||||
{
|
||||
struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
|
||||
oplock_break);
|
||||
@@ -2345,33 +2344,30 @@ cifs_oplock_break(struct slow_work *work)
|
||||
LOCKING_ANDX_OPLOCK_RELEASE, false);
|
||||
cFYI(1, "Oplock release rc = %d", rc);
|
||||
}
|
||||
|
||||
/*
|
||||
* We might have kicked in before is_valid_oplock_break()
|
||||
* finished grabbing reference for us. Make sure it's done by
|
||||
* waiting for GlobalSMSSeslock.
|
||||
*/
|
||||
write_lock(&GlobalSMBSeslock);
|
||||
write_unlock(&GlobalSMBSeslock);
|
||||
|
||||
cifs_oplock_break_put(cfile);
|
||||
}
|
||||
|
||||
static int
|
||||
cifs_oplock_break_get(struct slow_work *work)
|
||||
void cifs_oplock_break_get(struct cifsFileInfo *cfile)
|
||||
{
|
||||
struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
|
||||
oplock_break);
|
||||
mntget(cfile->mnt);
|
||||
cifsFileInfo_get(cfile);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
cifs_oplock_break_put(struct slow_work *work)
|
||||
void cifs_oplock_break_put(struct cifsFileInfo *cfile)
|
||||
{
|
||||
struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
|
||||
oplock_break);
|
||||
mntput(cfile->mnt);
|
||||
cifsFileInfo_put(cfile);
|
||||
}
|
||||
|
||||
const struct slow_work_ops cifs_oplock_break_ops = {
|
||||
.get_ref = cifs_oplock_break_get,
|
||||
.put_ref = cifs_oplock_break_put,
|
||||
.execute = cifs_oplock_break,
|
||||
};
|
||||
|
||||
const struct address_space_operations cifs_addr_ops = {
|
||||
.readpage = cifs_readpage,
|
||||
.readpages = cifs_readpages,
|
||||
|
Reference in New Issue
Block a user