linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	Steve French <steve.french@primarydata.com>,
	Pavel Shilovsky <pshilov@microsoft.com>,
	Aurelien Aptel <aaptel@suse.com>,
	Germano Percossi <germano.percossi@citrix.com>
Subject: [PATCH 4.8 094/140] Clarify locking of cifs file and tcon structures and make more granular
Date: Wed, 26 Oct 2016 14:22:34 +0200	[thread overview]
Message-ID: <20161026122224.404335117@linuxfoundation.org> (raw)
In-Reply-To: <20161026122220.384323763@linuxfoundation.org>

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Steve French <smfrench@gmail.com>

commit 3afca265b5f53a0b15b79531c13858049505582d upstream.

Remove the global file_list_lock to simplify cifs/smb3 locking and
have spinlocks that more closely match the information they are
protecting.

Add new tcon->open_file_lock and file->file_info_lock spinlocks.
Locks continue to follow a heirachy,
	cifs_socket --> cifs_ses --> cifs_tcon --> cifs_file
where global tcp_ses_lock still protects socket and cifs_ses, while the
the newer locks protect the lower level structure's information
(tcon and cifs_file respectively).

Signed-off-by: Steve French <steve.french@primarydata.com>
Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Reviewed-by: Germano Percossi <germano.percossi@citrix.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/cifs/cifsfs.c   |    1 
 fs/cifs/cifsglob.h |   30 ++++++++++++------------
 fs/cifs/cifssmb.c  |    4 +--
 fs/cifs/file.c     |   66 +++++++++++++++++++++++++++++++----------------------
 fs/cifs/misc.c     |   15 ++++++------
 fs/cifs/readdir.c  |    6 ++--
 fs/cifs/smb2misc.c |   16 ++++++------
 7 files changed, 75 insertions(+), 63 deletions(-)

--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -1271,7 +1271,6 @@ init_cifs(void)
 	GlobalTotalActiveXid = 0;
 	GlobalMaxActiveXid = 0;
 	spin_lock_init(&cifs_tcp_ses_lock);
-	spin_lock_init(&cifs_file_list_lock);
 	spin_lock_init(&GlobalMid_Lock);
 
 	get_random_bytes(&cifs_lock_secret, sizeof(cifs_lock_secret));
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -833,6 +833,7 @@ struct cifs_tcon {
 	struct list_head tcon_list;
 	int tc_count;
 	struct list_head openFileList;
+	spinlock_t open_file_lock; /* protects list above */
 	struct cifs_ses *ses;	/* pointer to session associated with */
 	char treeName[MAX_TREE_SIZE + 1]; /* UNC name of resource in ASCII */
 	char *nativeFileSystem;
@@ -889,7 +890,7 @@ struct cifs_tcon {
 #endif /* CONFIG_CIFS_STATS2 */
 	__u64    bytes_read;
 	__u64    bytes_written;
-	spinlock_t stat_lock;
+	spinlock_t stat_lock;  /* protects the two fields above */
 #endif /* CONFIG_CIFS_STATS */
 	FILE_SYSTEM_DEVICE_INFO fsDevInfo;
 	FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if fs name truncated */
@@ -1040,8 +1041,10 @@ struct cifs_fid_locks {
 };
 
 struct cifsFileInfo {
+	/* following two lists are protected by tcon->open_file_lock */
 	struct list_head tlist;	/* pointer to next fid owned by tcon */
 	struct list_head flist;	/* next fid (file instance) for this inode */
+	/* lock list below protected by cifsi->lock_sem */
 	struct cifs_fid_locks *llist;	/* brlocks held by this fid */
 	kuid_t uid;		/* allows finding which FileInfo structure */
 	__u32 pid;		/* process id who opened file */
@@ -1049,11 +1052,12 @@ struct cifsFileInfo {
 	/* BB add lock scope info here if needed */ ;
 	/* lock scope id (0 if none) */
 	struct dentry *dentry;
-	unsigned int f_flags;
 	struct tcon_link *tlink;
+	unsigned int f_flags;
 	bool invalidHandle:1;	/* file closed via session abend */
 	bool oplock_break_cancelled:1;
-	int count;		/* refcount protected by cifs_file_list_lock */
+	int count;
+	spinlock_t file_info_lock; /* protects four flag/count fields above */
 	struct mutex fh_mutex; /* prevents reopen race after dead ses*/
 	struct cifs_search_info srch_inf;
 	struct work_struct oplock_break; /* work for oplock breaks */
@@ -1120,7 +1124,7 @@ struct cifs_writedata {
 
 /*
  * Take a reference on the file private data. Must be called with
- * cifs_file_list_lock held.
+ * cfile->file_info_lock held.
  */
 static inline void
 cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
@@ -1514,8 +1518,10 @@ require use of the stronger protocol */
  *  GlobalMid_Lock protects:
  *	list operations on pending_mid_q and oplockQ
  *      updates to XID counters, multiplex id  and SMB sequence numbers
- *  cifs_file_list_lock protects:
- *	list operations on tcp and SMB session lists and tCon lists
+ *  tcp_ses_lock protects:
+ *	list operations on tcp and SMB session lists
+ *  tcon->open_file_lock protects the list of open files hanging off the tcon
+ *  cfile->file_info_lock protects counters and fields in cifs file struct
  *  f_owner.lock protects certain per file struct operations
  *  mapping->page_lock protects certain per page operations
  *
@@ -1547,18 +1553,12 @@ GLOBAL_EXTERN struct list_head		cifs_tcp
  * tcp session, and the list of tcon's per smb session. It also protects
  * the reference counters for the server, smb session, and tcon. Finally,
  * changes to the tcon->tidStatus should be done while holding this lock.
+ * generally the locks should be taken in order tcp_ses_lock before
+ * tcon->open_file_lock and that before file->file_info_lock since the
+ * structure order is cifs_socket-->cifs_ses-->cifs_tcon-->cifs_file
  */
 GLOBAL_EXTERN spinlock_t		cifs_tcp_ses_lock;
 
-/*
- * This lock protects the cifs_file->llist and cifs_file->flist
- * list operations, and updates to some flags (cifs_file->invalidHandle)
- * It will be moved to either use the tcon->stat_lock or equivalent later.
- * If cifs_tcp_ses_lock and the lock below are both needed to be held, then
- * the cifs_tcp_ses_lock must be grabbed first and released last.
- */
-GLOBAL_EXTERN spinlock_t	cifs_file_list_lock;
-
 #ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL /* unused temporarily */
 /* Outstanding dir notify requests */
 GLOBAL_EXTERN struct list_head GlobalDnotifyReqList;
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -98,13 +98,13 @@ cifs_mark_open_files_invalid(struct cifs
 	struct list_head *tmp1;
 
 	/* list all files open on tree connection and mark them invalid */
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tcon->open_file_lock);
 	list_for_each_safe(tmp, tmp1, &tcon->openFileList) {
 		open_file = list_entry(tmp, struct cifsFileInfo, tlist);
 		open_file->invalidHandle = true;
 		open_file->oplock_break_cancelled = true;
 	}
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tcon->open_file_lock);
 	/*
 	 * BB Add call to invalidate_inodes(sb) for all superblocks mounted
 	 * to this tcon.
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -305,6 +305,7 @@ cifs_new_fileinfo(struct cifs_fid *fid,
 	cfile->tlink = cifs_get_tlink(tlink);
 	INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
 	mutex_init(&cfile->fh_mutex);
+	spin_lock_init(&cfile->file_info_lock);
 
 	cifs_sb_active(inode->i_sb);
 
@@ -317,7 +318,7 @@ cifs_new_fileinfo(struct cifs_fid *fid,
 		oplock = 0;
 	}
 
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tcon->open_file_lock);
 	if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
 		oplock = fid->pending_open->oplock;
 	list_del(&fid->pending_open->olist);
@@ -326,12 +327,13 @@ cifs_new_fileinfo(struct cifs_fid *fid,
 	server->ops->set_fid(cfile, fid, oplock);
 
 	list_add(&cfile->tlist, &tcon->openFileList);
+
 	/* if readable file instance put first in list*/
 	if (file->f_mode & FMODE_READ)
 		list_add(&cfile->flist, &cinode->openFileList);
 	else
 		list_add_tail(&cfile->flist, &cinode->openFileList);
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tcon->open_file_lock);
 
 	if (fid->purge_cache)
 		cifs_zap_mapping(inode);
@@ -343,16 +345,16 @@ cifs_new_fileinfo(struct cifs_fid *fid,
 struct cifsFileInfo *
 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
 {
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&cifs_file->file_info_lock);
 	cifsFileInfo_get_locked(cifs_file);
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&cifs_file->file_info_lock);
 	return cifs_file;
 }
 
 /*
  * Release a reference on the file private data. This may involve closing
  * the filehandle out on the server. Must be called without holding
- * cifs_file_list_lock.
+ * tcon->open_file_lock and cifs_file->file_info_lock.
  */
 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
 {
@@ -367,11 +369,15 @@ void cifsFileInfo_put(struct cifsFileInf
 	struct cifs_pending_open open;
 	bool oplock_break_cancelled;
 
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tcon->open_file_lock);
+
+	spin_lock(&cifs_file->file_info_lock);
 	if (--cifs_file->count > 0) {
-		spin_unlock(&cifs_file_list_lock);
+		spin_unlock(&cifs_file->file_info_lock);
+		spin_unlock(&tcon->open_file_lock);
 		return;
 	}
+	spin_unlock(&cifs_file->file_info_lock);
 
 	if (server->ops->get_lease_key)
 		server->ops->get_lease_key(inode, &fid);
@@ -395,7 +401,8 @@ void cifsFileInfo_put(struct cifsFileInf
 			set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
 		cifs_set_oplock_level(cifsi, 0);
 	}
-	spin_unlock(&cifs_file_list_lock);
+
+	spin_unlock(&tcon->open_file_lock);
 
 	oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);
 
@@ -772,10 +779,10 @@ int cifs_closedir(struct inode *inode, s
 	server = tcon->ses->server;
 
 	cifs_dbg(FYI, "Freeing private data in close dir\n");
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&cfile->file_info_lock);
 	if (server->ops->dir_needs_close(cfile)) {
 		cfile->invalidHandle = true;
-		spin_unlock(&cifs_file_list_lock);
+		spin_unlock(&cfile->file_info_lock);
 		if (server->ops->close_dir)
 			rc = server->ops->close_dir(xid, tcon, &cfile->fid);
 		else
@@ -784,7 +791,7 @@ int cifs_closedir(struct inode *inode, s
 		/* not much we can do if it fails anyway, ignore rc */
 		rc = 0;
 	} else
-		spin_unlock(&cifs_file_list_lock);
+		spin_unlock(&cfile->file_info_lock);
 
 	buf = cfile->srch_inf.ntwrk_buf_start;
 	if (buf) {
@@ -1728,12 +1735,13 @@ struct cifsFileInfo *find_readable_file(
 {
 	struct cifsFileInfo *open_file = NULL;
 	struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
+	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
 
 	/* only filter by fsuid on multiuser mounts */
 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
 		fsuid_only = false;
 
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tcon->open_file_lock);
 	/* we could simply get the first_list_entry since write-only entries
 	   are always at the end of the list but since the first entry might
 	   have a close pending, we go through the whole list */
@@ -1744,8 +1752,8 @@ struct cifsFileInfo *find_readable_file(
 			if (!open_file->invalidHandle) {
 				/* found a good file */
 				/* lock it so it will not be closed on us */
-				cifsFileInfo_get_locked(open_file);
-				spin_unlock(&cifs_file_list_lock);
+				cifsFileInfo_get(open_file);
+				spin_unlock(&tcon->open_file_lock);
 				return open_file;
 			} /* else might as well continue, and look for
 			     another, or simply have the caller reopen it
@@ -1753,7 +1761,7 @@ struct cifsFileInfo *find_readable_file(
 		} else /* write only file */
 			break; /* write only files are last so must be done */
 	}
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tcon->open_file_lock);
 	return NULL;
 }
 
@@ -1762,6 +1770,7 @@ struct cifsFileInfo *find_writable_file(
 {
 	struct cifsFileInfo *open_file, *inv_file = NULL;
 	struct cifs_sb_info *cifs_sb;
+	struct cifs_tcon *tcon;
 	bool any_available = false;
 	int rc;
 	unsigned int refind = 0;
@@ -1777,15 +1786,16 @@ struct cifsFileInfo *find_writable_file(
 	}
 
 	cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
+	tcon = cifs_sb_master_tcon(cifs_sb);
 
 	/* only filter by fsuid on multiuser mounts */
 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
 		fsuid_only = false;
 
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tcon->open_file_lock);
 refind_writable:
 	if (refind > MAX_REOPEN_ATT) {
-		spin_unlock(&cifs_file_list_lock);
+		spin_unlock(&tcon->open_file_lock);
 		return NULL;
 	}
 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
@@ -1796,8 +1806,8 @@ refind_writable:
 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
 			if (!open_file->invalidHandle) {
 				/* found a good writable file */
-				cifsFileInfo_get_locked(open_file);
-				spin_unlock(&cifs_file_list_lock);
+				cifsFileInfo_get(open_file);
+				spin_unlock(&tcon->open_file_lock);
 				return open_file;
 			} else {
 				if (!inv_file)
@@ -1813,24 +1823,24 @@ refind_writable:
 
 	if (inv_file) {
 		any_available = false;
-		cifsFileInfo_get_locked(inv_file);
+		cifsFileInfo_get(inv_file);
 	}
 
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tcon->open_file_lock);
 
 	if (inv_file) {
 		rc = cifs_reopen_file(inv_file, false);
 		if (!rc)
 			return inv_file;
 		else {
-			spin_lock(&cifs_file_list_lock);
+			spin_lock(&tcon->open_file_lock);
 			list_move_tail(&inv_file->flist,
 					&cifs_inode->openFileList);
-			spin_unlock(&cifs_file_list_lock);
+			spin_unlock(&tcon->open_file_lock);
 			cifsFileInfo_put(inv_file);
-			spin_lock(&cifs_file_list_lock);
 			++refind;
 			inv_file = NULL;
+			spin_lock(&tcon->open_file_lock);
 			goto refind_writable;
 		}
 	}
@@ -3618,15 +3628,17 @@ static int cifs_readpage(struct file *fi
 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
 {
 	struct cifsFileInfo *open_file;
+	struct cifs_tcon *tcon =
+		cifs_sb_master_tcon(CIFS_SB(cifs_inode->vfs_inode.i_sb));
 
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tcon->open_file_lock);
 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
-			spin_unlock(&cifs_file_list_lock);
+			spin_unlock(&tcon->open_file_lock);
 			return 1;
 		}
 	}
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tcon->open_file_lock);
 	return 0;
 }
 
--- a/fs/cifs/misc.c
+++ b/fs/cifs/misc.c
@@ -120,6 +120,7 @@ tconInfoAlloc(void)
 		++ret_buf->tc_count;
 		INIT_LIST_HEAD(&ret_buf->openFileList);
 		INIT_LIST_HEAD(&ret_buf->tcon_list);
+		spin_lock_init(&ret_buf->open_file_lock);
 #ifdef CONFIG_CIFS_STATS
 		spin_lock_init(&ret_buf->stat_lock);
 #endif
@@ -465,7 +466,7 @@ is_valid_oplock_break(char *buffer, stru
 				continue;
 
 			cifs_stats_inc(&tcon->stats.cifs_stats.num_oplock_brks);
-			spin_lock(&cifs_file_list_lock);
+			spin_lock(&tcon->open_file_lock);
 			list_for_each(tmp2, &tcon->openFileList) {
 				netfile = list_entry(tmp2, struct cifsFileInfo,
 						     tlist);
@@ -495,11 +496,11 @@ is_valid_oplock_break(char *buffer, stru
 					   &netfile->oplock_break);
 				netfile->oplock_break_cancelled = false;
 
-				spin_unlock(&cifs_file_list_lock);
+				spin_unlock(&tcon->open_file_lock);
 				spin_unlock(&cifs_tcp_ses_lock);
 				return true;
 			}
-			spin_unlock(&cifs_file_list_lock);
+			spin_unlock(&tcon->open_file_lock);
 			spin_unlock(&cifs_tcp_ses_lock);
 			cifs_dbg(FYI, "No matching file for oplock break\n");
 			return true;
@@ -613,9 +614,9 @@ backup_cred(struct cifs_sb_info *cifs_sb
 void
 cifs_del_pending_open(struct cifs_pending_open *open)
 {
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tlink_tcon(open->tlink)->open_file_lock);
 	list_del(&open->olist);
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tlink_tcon(open->tlink)->open_file_lock);
 }
 
 void
@@ -635,7 +636,7 @@ void
 cifs_add_pending_open(struct cifs_fid *fid, struct tcon_link *tlink,
 		      struct cifs_pending_open *open)
 {
-	spin_lock(&cifs_file_list_lock);
+	spin_lock(&tlink_tcon(tlink)->open_file_lock);
 	cifs_add_pending_open_locked(fid, tlink, open);
-	spin_unlock(&cifs_file_list_lock);
+	spin_unlock(&tlink_tcon(open->tlink)->open_file_lock);
 }
--- a/fs/cifs/readdir.c
+++ b/fs/cifs/readdir.c
@@ -597,14 +597,14 @@ find_cifs_entry(const unsigned int xid,
 	     is_dir_changed(file)) || (index_to_find < first_entry_in_buffer)) {
 		/* close and restart search */
 		cifs_dbg(FYI, "search backing up - close and restart search\n");
-		spin_lock(&cifs_file_list_lock);
+		spin_lock(&cfile->file_info_lock);
 		if (server->ops->dir_needs_close(cfile)) {
 			cfile->invalidHandle = true;
-			spin_unlock(&cifs_file_list_lock);
+			spin_unlock(&cfile->file_info_lock);
 			if (server->ops->close_dir)
 				server->ops->close_dir(xid, tcon, &cfile->fid);
 		} else
-			spin_unlock(&cifs_file_list_lock);
+			spin_unlock(&cfile->file_info_lock);
 		if (cfile->srch_inf.ntwrk_buf_start) {
 			cifs_dbg(FYI, "freeing SMB ff cache buf on search rewind\n");
 			if (cfile->srch_inf.smallBuf)
--- a/fs/cifs/smb2misc.c
+++ b/fs/cifs/smb2misc.c
@@ -549,19 +549,19 @@ smb2_is_valid_lease_break(char *buffer)
 		list_for_each(tmp1, &server->smb_ses_list) {
 			ses = list_entry(tmp1, struct cifs_ses, smb_ses_list);
 
-			spin_lock(&cifs_file_list_lock);
 			list_for_each(tmp2, &ses->tcon_list) {
 				tcon = list_entry(tmp2, struct cifs_tcon,
 						  tcon_list);
+				spin_lock(&tcon->open_file_lock);
 				cifs_stats_inc(
 				    &tcon->stats.cifs_stats.num_oplock_brks);
 				if (smb2_tcon_has_lease(tcon, rsp, lw)) {
-					spin_unlock(&cifs_file_list_lock);
+					spin_unlock(&tcon->open_file_lock);
 					spin_unlock(&cifs_tcp_ses_lock);
 					return true;
 				}
+				spin_unlock(&tcon->open_file_lock);
 			}
-			spin_unlock(&cifs_file_list_lock);
 		}
 	}
 	spin_unlock(&cifs_tcp_ses_lock);
@@ -603,7 +603,7 @@ smb2_is_valid_oplock_break(char *buffer,
 			tcon = list_entry(tmp1, struct cifs_tcon, tcon_list);
 
 			cifs_stats_inc(&tcon->stats.cifs_stats.num_oplock_brks);
-			spin_lock(&cifs_file_list_lock);
+			spin_lock(&tcon->open_file_lock);
 			list_for_each(tmp2, &tcon->openFileList) {
 				cfile = list_entry(tmp2, struct cifsFileInfo,
 						     tlist);
@@ -615,7 +615,7 @@ smb2_is_valid_oplock_break(char *buffer,
 
 				cifs_dbg(FYI, "file id match, oplock break\n");
 				cinode = CIFS_I(d_inode(cfile->dentry));
-
+				spin_lock(&cfile->file_info_lock);
 				if (!CIFS_CACHE_WRITE(cinode) &&
 				    rsp->OplockLevel == SMB2_OPLOCK_LEVEL_NONE)
 					cfile->oplock_break_cancelled = true;
@@ -637,14 +637,14 @@ smb2_is_valid_oplock_break(char *buffer,
 					clear_bit(
 					   CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
 					   &cinode->flags);
-
+				spin_unlock(&cfile->file_info_lock);
 				queue_work(cifsiod_wq, &cfile->oplock_break);
 
-				spin_unlock(&cifs_file_list_lock);
+				spin_unlock(&tcon->open_file_lock);
 				spin_unlock(&cifs_tcp_ses_lock);
 				return true;
 			}
-			spin_unlock(&cifs_file_list_lock);
+			spin_unlock(&tcon->open_file_lock);
 			spin_unlock(&cifs_tcp_ses_lock);
 			cifs_dbg(FYI, "No matching file for oplock break\n");
 			return true;

  parent reply	other threads:[~2016-10-26 13:18 UTC|newest]

Thread overview: 140+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20161026122540epcas4p46005dbdfffd52a053abab7ecf222382c@epcas4p4.samsung.com>
2016-10-26 12:21 ` [PATCH 4.8 000/140] 4.8.5-stable review Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 001/140] gpio: mpc8xxx: Correct irq handler function Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 002/140] mei: fix return value on disconnection Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 003/140] mei: me: add kaby point device ids Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 004/140] regulator: tps65910: Work around silicon erratum SWCZ010 Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 005/140] clk: imx6: initialize GPU clocks Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 006/140] clk: imx6: fix i.MX6DL clock tree to reflect reality Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 007/140] spi: spidev_test: Fix buffer overflow in unescape() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 008/140] PM / devfreq: event: remove duplicate devfreq_event_get_drvdata() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 009/140] ath10k: fix copy engine 5 destination ring stuck Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 010/140] rtlwifi: Fix missing country code for Great Britain Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 012/140] mmc: sdhci: cast unsigned int to unsigned long long to avoid unexpeted error Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 013/140] PCI: Mark Atheros AR9580 to avoid bus reset Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 014/140] PCI: tegra: Fix argument order in tegra_pcie_phy_disable() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 015/140] platform: dont return 0 from platform_get_irq[_byname]() on error Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 016/140] cpufreq: ti: Use generic platdev driver Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 017/140] cpufreq: conservative: Fix next frequency selection Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 018/140] cpufreq: skip invalid entries when searching the frequency Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 019/140] cpufreq: intel_pstate: Fix unsafe HWP MSR access Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 021/140] parisc: Increase KERNEL_INITIAL_SIZE for 32-bit SMP kernels Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 022/140] parisc: Fix self-detected CPU stall warnings on Mako machines Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 023/140] parisc: Fix kernel memory layout regarding position of __gp Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 024/140] parisc: Increase initial kernel mapping size Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 025/140] pstore/ramoops: fixup driver removal Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 027/140] pstore/ram: Use memcpy_toio instead of memcpy Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 028/140] pstore/ram: Use memcpy_fromio() to save old buffer Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 029/140] perf intel-pt: Fix snapshot overlap detection decoder errors Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 030/140] perf intel-pt: Fix estimated timestamps for cycle-accurate mode Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 031/140] perf intel-pt: Fix MTC timestamp calculation for large MTC periods Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 032/140] dm: mark request_queue dead before destroying the DM device Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 033/140] dm: return correct error code in dm_resume()s retry loop Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 034/140] dm rq: take request_queue lock while clearing QUEUE_FLAG_STOPPED Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 035/140] dm mpath: check if paths request_queue is dying in activate_path() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 036/140] dm crypt: fix crash on exit Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 037/140] powerpc/xmon: Dont use ld on 32-bit Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 038/140] powerpc/vdso64: Use double word compare on pointers Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 039/140] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 040/140] powerpc/eeh: Null check uses of eeh_pe_bus_get Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 041/140] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 042/140] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data() Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 043/140] powerpc/mm: Update FORCE_MAX_ZONEORDER range to allow hugetlb w/4K Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 044/140] powerpc/64: Fix incorrect return value from __copy_tofrom_user Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 045/140] powerpc/pseries: Fix stack corruption in htpe code Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 046/140] powerpc/mm/hash64: Fix might_have_hea() check Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 047/140] IB/srp: Fix infinite loop when FMR sg[0].offset != 0 Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 048/140] IB/core: correctly handle rdma_rw_init_mrs() failure Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 049/140] ubi: Deal with interrupted erasures in WL Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 050/140] zfcp: fix fc_host port_type with NPIV Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 051/140] zfcp: fix ELS/GS request&response length for hardware data router Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 052/140] zfcp: close window with unblocked rport during rport gone Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 053/140] zfcp: retain trace level for SCSI and HBA FSF response records Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 054/140] zfcp: restore: Dont use 0 to indicate invalid LUN in rec trace Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 055/140] zfcp: trace on request for open and close of WKA port Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 056/140] zfcp: restore tracing of handle for port and LUN with HBA records Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 057/140] zfcp: fix D_ID field with actual value on tracing SAN responses Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 058/140] zfcp: fix payload trace length for SAN request&response Greg Kroah-Hartman
2016-10-26 12:21   ` [PATCH 4.8 059/140] zfcp: trace full payload of all SAN records (req,resp,iels) Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 060/140] scsi: zfcp: spin_lock_irqsave() is not nestable Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 061/140] fbdev/efifb: Fix 16 color palette entry calculation Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 062/140] ovl: Fix info leak in ovl_lookup_temp() Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 063/140] ovl: copy_up_xattr(): use strnlen Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 064/140] [media] mb86a20s: fix the locking logic Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 065/140] [media] mb86a20s: fix demod settings Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 066/140] [media] cx231xx: dont return error on success Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 067/140] [media] cx231xx: fix GPIOs for Pixelview SBTVD hybrid Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 068/140] [media] cx231xx: cant proceed if I2C bus register fails Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 069/140] ALSA: hda - Fix a failure of micmute led when having multi adcs Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 071/140] MIPS: ptrace: Fix regs_return_value for kernel context Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 072/140] Input: i8042 - skip selftest on ASUS laptops Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 073/140] Input: elantech - force needed quirks on Fujitsu H760 Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 074/140] Input: elantech - add Fujitsu Lifebook E556 to force crc_enabled Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 075/140] sunrpc: fix write space race causing stalls Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 076/140] NFSD: fix corruption in notifier registration Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 077/140] NFS: Fix inode corruption in nfs_prime_dcache() Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 078/140] NFSv4: Dont report revoked delegations as valid in nfs_have_delegation() Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 079/140] NFSv4: nfs4_copy_delegation_stateid() must fail if the delegation is invalid Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 080/140] NFSv4: Open state recovery must account for file permission changes Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 081/140] NFSv4.2: Fix a reference leak in nfs42_proc_layoutstats_generic Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 082/140] pnfs/blocklayout: fix last_write_offset incorrectly set to page boundary Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 083/140] scsi: Fix use-after-free Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 085/140] watchdog: mt7621_wdt: Remove assignment of dev pointer Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 086/140] metag: Only define atomic_dec_if_positive conditionally Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 087/140] soc/fsl/qe: fix gpio save_regs functions Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 088/140] soc/fsl/qe: fix Oops on CPM1 (and likely CPM2) Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 089/140] arm64: KVM: VHE: reset PSTATE.PAN on entry to EL2 Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 090/140] arc: dont leak bits of kernel stack into coredump Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 091/140] fs/super.c: fix race between freeze_super() and thaw_super() Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 092/140] cifs: Limit the overall credit acquired Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 093/140] fs/cifs: keep guid when assigning fid to fileinfo Greg Kroah-Hartman
2016-10-26 12:22   ` Greg Kroah-Hartman [this message]
2016-10-26 12:22   ` [PATCH 4.8 095/140] Display number of credits available Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 096/140] Set previous session id correctly on SMB3 reconnect Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 097/140] SMB3: GUIDs should be constructed as random but valid uuids Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 098/140] Do not send SMB3 SET_INFO request if nothing is changing Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 099/140] Cleanup missing frees on some ioctls Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 100/140] Fix regression which breaks DFS mounting Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 101/140] blkcg: Unlock blkcg_pol_mutex only once when cpd == NULL Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 102/140] x86/e820: Dont merge consecutive E820_PRAM ranges Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 104/140] x86/platform/UV: Fix support for EFI_OLD_MEMMAP after BIOS callback updates Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 106/140] pinctrl: intel: Only restore pins that are used by the driver Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 108/140] sched/fair: Fix incorrect task group ->load_avg Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 109/140] sched/fair: Fix min_vruntime tracking Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 110/140] irqchip/gicv3: Handle loop timeout proper Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 111/140] irqchip/eznps: Acknowledge NPS_IPI before calling the handler Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 112/140] irqchip/gic-v3-its: Fix entry size mask for GITS_BASER Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 113/140] cxl: Prevent adapter reset if an active context exists Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 114/140] isofs: Do not return EACCES for unknown filesystems Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 115/140] memstick: rtsx_usb_ms: Runtime resume the device when polling for cards Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 116/140] memstick: rtsx_usb_ms: Manage runtime PM when accessing the device Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 117/140] arm64: swp emulation: bound LL/SC retries before rescheduling Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 118/140] arm64: kaslr: fix breakage with CONFIG_MODVERSIONS=y Greg Kroah-Hartman
2016-10-26 12:22   ` [PATCH 4.8 119/140] arm64: percpu: rewrite ll/sc loops in assembly Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 120/140] arm64: kernel: Init MDCR_EL2 even in the absence of a PMU Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 121/140] arm64: Cortex-A53 errata workaround: check for kernel addresses Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 122/140] arm64: KVM: Take S1 walks into account when determining S2 write faults Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 123/140] ceph: fix error handling in ceph_read_iter Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 124/140] powerpc/mm: Prevent unlikely crash in copro_calculate_slb() Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 125/140] mmc: core: Annotate cmd_hdr as __le32 Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 126/140] mmc: core: switch to 1V8 or 1V2 for hs400es mode Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 127/140] mmc: rtsx_usb_sdmmc: Avoid keeping the device runtime resumed when unused Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 128/140] mmc: rtsx_usb_sdmmc: Handle runtime PM while changing the led Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 129/140] KVM: s390: reject invalid modes for runtime instrumentation Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 130/140] fscrypto: make XTS tweak initialization endian-independent Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 131/140] fscrypto: lock inode while setting encryption policy Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 132/140] ext4: do not advertise encryption support when disabled Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 133/140] jbd2: fix incorrect unlock on j_list_lock Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 134/140] ubifs: Fix xattr_names length in exit paths Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 135/140] ubifs: Abort readdir upon error Greg Kroah-Hartman
2016-10-26 12:40     ` Richard Weinberger
2016-10-26 13:16       ` Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 136/140] target/tcm_fc: use CPU affinity for responses Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 137/140] target: Re-add missing SCF_ACK_KREF assignment in v4.1.y Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 138/140] target: Make EXTENDED_COPY 0xe4 failure return COPY TARGET DEVICE NOT REACHABLE Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 139/140] target: Dont override EXTENDED_COPY xcopy_pt_cmd SCSI status code Greg Kroah-Hartman
2016-10-26 12:23   ` [PATCH 4.8 140/140] Revert "target: Fix residual overflow handling in target_complete_cmd_with_length" Greg Kroah-Hartman
2016-10-26 18:44   ` [PATCH 4.8 000/140] 4.8.5-stable review Shuah Khan
2016-10-27  5:15     ` Greg Kroah-Hartman
2016-10-26 21:49   ` Guenter Roeck
2016-10-27  5:16     ` Greg Kroah-Hartman
     [not found]   ` <5811acdd.4336c20a.fcad1.2674@mx.google.com>
2016-10-27 13:04     ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161026122224.404335117@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=aaptel@suse.com \
    --cc=germano.percossi@citrix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pshilov@microsoft.com \
    --cc=stable@vger.kernel.org \
    --cc=steve.french@primarydata.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).