CacheFiles: Provide read-and-reset release counters for cachefilesd
[linux-2.6-block.git] / fs / cachefiles / daemon.c
index 452e98dd756053363a092a456ede5de373d9361f..1ee54ffd3a248d1cd279c6bc7fe69be40ac01353 100644 (file)
@@ -162,6 +162,8 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer,
                                      size_t buflen, loff_t *pos)
 {
        struct cachefiles_cache *cache = file->private_data;
+       unsigned long long b_released;
+       unsigned f_released;
        char buffer[256];
        int n;
 
@@ -174,6 +176,8 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer,
        cachefiles_has_space(cache, 0, 0);
 
        /* summarise */
+       f_released = atomic_xchg(&cache->f_released, 0);
+       b_released = atomic_long_xchg(&cache->b_released, 0);
        clear_bit(CACHEFILES_STATE_CHANGED, &cache->flags);
 
        n = snprintf(buffer, sizeof(buffer),
@@ -183,15 +187,18 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer,
                     " fstop=%llx"
                     " brun=%llx"
                     " bcull=%llx"
-                    " bstop=%llx",
+                    " bstop=%llx"
+                    " freleased=%x"
+                    " breleased=%llx",
                     test_bit(CACHEFILES_CULLING, &cache->flags) ? '1' : '0',
                     (unsigned long long) cache->frun,
                     (unsigned long long) cache->fcull,
                     (unsigned long long) cache->fstop,
                     (unsigned long long) cache->brun,
                     (unsigned long long) cache->bcull,
-                    (unsigned long long) cache->bstop
-                    );
+                    (unsigned long long) cache->bstop,
+                    f_released,
+                    b_released);
 
        if (n > buflen)
                return -EMSGSIZE;