]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
cifs: track writepages in vfs operation counters
authorSteve French <stfrench@microsoft.com>
Thu, 11 Oct 2018 06:01:02 +0000 (01:01 -0500)
committerSteve French <stfrench@microsoft.com>
Wed, 24 Oct 2018 02:16:05 +0000 (21:16 -0500)
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@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
fs/cifs/file.c

index 00abaa1dce022bd4d32198ed55a58ae1d8b6aea5..84477e995246df9276faefc8e376f2f0765f1da5 100644 (file)
@@ -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;
 }