summaryrefslogtreecommitdiffstats
path: root/fs/afs
diff options
context:
space:
mode:
authorMarc Dionne <marc.dionne@auristor.com>2019-04-25 12:04:37 -0300
committerDavid Howells <dhowells@redhat.com>2019-05-07 16:48:44 +0100
commitc0abbb5791f1984350f1dac72c31c67010010a30 (patch)
tree6d2c3a5c335517f57b25d512f35a1bdbb6dc27f2 /fs/afs
parentb134d687dd9369bb2407a23c6ecc9e0a15d8bb20 (diff)
downloadlinux-c0abbb5791f1984350f1dac72c31c67010010a30.tar.bz2
afs: Calculate i_blocks based on file size
While it's not possible to give an accurate number for the blocks used on the server, populate i_blocks based on the file size so that 'du' can give a reasonable estimate. The value is rounded up to 1K granularity, for consistency with what other AFS clients report, and the servers' 1K usage quota unit. Note that the value calculated by 'du' at the root of a volume can still be slightly lower than the quota usage on the server, as 0-length files are charged 1 quota block, but are reported as occupying 0 blocks. Again, this is consistent with other AFS clients. Signed-off-by: Marc Dionne <marc.dionne@auristor.com> Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs')
-rw-r--r--fs/afs/inode.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
index 0362cc7e1c7c..c4652b42d545 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -111,7 +111,11 @@ static int afs_inode_init_from_status(struct afs_vnode *vnode, struct key *key,
return afs_protocol_error(NULL, -EBADMSG, afs_eproto_file_type);
}
- inode->i_blocks = 0;
+ /*
+ * Estimate 512 bytes blocks used, rounded up to nearest 1K
+ * for consistency with other AFS clients.
+ */
+ inode->i_blocks = ((i_size_read(inode) + 1023) >> 10) << 1;
vnode->invalid_before = vnode->status.data_version;
read_sequnlock_excl(&vnode->cb_lock);