[PATCH] cifs: track writepages in vfs operation counters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



writepages and readpages operations did not call get/free_xid
so the statistics for file copy could get confusing with "vfs operations"
not increasing.  Add get_xid and free_xid to cifs readpages and
writepages functions.

Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx>
---
 fs/cifs/file.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 00abaa1dce02..84477e995246 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -2107,6 +2107,7 @@ static int cifs_writepages(struct address_space *mapping,
     pgoff_t end, index;
     struct cifs_writedata *wdata;
     int rc = 0;
+    unsigned int xid;

     /*
      * If wsize is smaller than the page cache size, default to writing
@@ -2115,6 +2116,7 @@ static int cifs_writepages(struct address_space *mapping,
     if (cifs_sb->wsize < PAGE_SIZE)
         return generic_writepages(mapping, wbc);

+    xid = get_xid();
     if (wbc->range_cyclic) {
         index = mapping->writeback_index; /* Start from prev offset */
         end = -1;
@@ -2208,6 +2210,7 @@ static int cifs_writepages(struct address_space *mapping,
     if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
         mapping->writeback_index = index;

+    free_xid(xid);
     return rc;
 }

@@ -3752,7 +3755,9 @@ static int cifs_readpages(struct file *file,
struct address_space *mapping,
     struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
     struct TCP_Server_Info *server;
     pid_t pid;
+    unsigned int xid;

+    xid = get_xid();
     /*
      * Reads as many pages as possible from fscache. Returns -ENOBUFS
      * immediately if the cookie is negative
@@ -3762,8 +3767,10 @@ static int cifs_readpages(struct file *file,
struct address_space *mapping,
      */
     rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
                      &num_pages);
-    if (rc == 0)
+    if (rc == 0) {
+        free_xid(xid);
         return rc;
+    }

     if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
         pid = open_file->pid;
@@ -3807,6 +3814,7 @@ static int cifs_readpages(struct file *file,
struct address_space *mapping,
          */
         if (unlikely(rsize < PAGE_SIZE)) {
             add_credits_and_wake_if(server, credits, 0);
+            free_xid(xid);
             return 0;
         }

@@ -3871,6 +3879,7 @@ static int cifs_readpages(struct file *file,
struct address_space *mapping,
      * allocator.
      */
     cifs_fscache_readpages_cancel(mapping->host, page_list);
+    free_xid(xid);
     return rc;
 }


-- 
Thanks,

Steve
From 79ec5c09fb84ab57118d6a246d7f9483cc4b09b3 Mon Sep 17 00:00:00 2001
From: Steve French <stfrench@xxxxxxxxxxxxx>
Date: Thu, 11 Oct 2018 01:01:02 -0500
Subject: [PATCH] cifs: track writepages in vfs operation counters

writepages and readpages operations did not call get/free_xid
so the statistics for file copy could get confusing with "vfs operations"
not increasing.  Add get_xid and free_xid to cifs readpages and
writepages functions.

Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx>
---
 fs/cifs/file.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 00abaa1dce02..84477e995246 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -2107,6 +2107,7 @@ static int cifs_writepages(struct address_space *mapping,
 	pgoff_t end, index;
 	struct cifs_writedata *wdata;
 	int rc = 0;
+	unsigned int xid;
 
 	/*
 	 * If wsize is smaller than the page cache size, default to writing
@@ -2115,6 +2116,7 @@ static int cifs_writepages(struct address_space *mapping,
 	if (cifs_sb->wsize < PAGE_SIZE)
 		return generic_writepages(mapping, wbc);
 
+	xid = get_xid();
 	if (wbc->range_cyclic) {
 		index = mapping->writeback_index; /* Start from prev offset */
 		end = -1;
@@ -2208,6 +2210,7 @@ static int cifs_writepages(struct address_space *mapping,
 	if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
 		mapping->writeback_index = index;
 
+	free_xid(xid);
 	return rc;
 }
 
@@ -3752,7 +3755,9 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
 	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
 	struct TCP_Server_Info *server;
 	pid_t pid;
+	unsigned int xid;
 
+	xid = get_xid();
 	/*
 	 * Reads as many pages as possible from fscache. Returns -ENOBUFS
 	 * immediately if the cookie is negative
@@ -3762,8 +3767,10 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
 	 */
 	rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
 					 &num_pages);
-	if (rc == 0)
+	if (rc == 0) {
+		free_xid(xid);
 		return rc;
+	}
 
 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
 		pid = open_file->pid;
@@ -3807,6 +3814,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
 		 */
 		if (unlikely(rsize < PAGE_SIZE)) {
 			add_credits_and_wake_if(server, credits, 0);
+			free_xid(xid);
 			return 0;
 		}
 
@@ -3871,6 +3879,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
 	 * allocator.
 	 */
 	cifs_fscache_readpages_cancel(mapping->host, page_list);
+	free_xid(xid);
 	return rc;
 }
 
-- 
2.17.1


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux