* [PATCH] cifs: Fix df output for users with quota limits
@ 2017-08-03 7:39 Sachin Prabhu
[not found] ` <20170803073903.31575-1-sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: Sachin Prabhu @ 2017-08-03 7:39 UTC (permalink / raw)
To: linux-cifs
The df for a SMB2 share triggers a GetInfo call for
FS_FULL_SIZE_INFORMATION. The values returned are used to populate
struct statfs.
The problem is that none of the information returned by the call
contains the total blocks available on the filesystem. Instead we use
the blocks available to the user ie. quota limitation when filling out
statfs.f_blocks. The information returned does contain Actual free units
on the filesystem and is used to populate statfs.f_bfree. For users with
quota enabled, it can lead to situations where the total free space
reported is more than the total blocks on the system ending up with df
reports like the following
# df -h /mnt/a
Filesystem Size Used Avail Use% Mounted on
//192.168.22.10/a 2.5G -2.3G 2.5G - /mnt/a
To fix this problem, we instead populate both statfs.f_bfree with the
same value as statfs.f_bavail ie. CallerAvailableAllocationUnits. This
is similar to what is done already in the code for cifs and df now
reports the quota information for the user used to mount the share.
# df --si /mnt/a
Filesystem Size Used Avail Use% Mounted on
//192.168.22.10/a 2.7G 101M 2.6G 4% /mnt/a
Signed-off-by: Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Signed-off-by: Pierguido Lambri <plambri-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
fs/cifs/smb2pdu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 5fb2fc2..97edb4d3 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -3219,8 +3219,8 @@ copy_fs_info_to_kstatfs(struct smb2_fs_full_size_info *pfs_inf,
kst->f_bsize = le32_to_cpu(pfs_inf->BytesPerSector) *
le32_to_cpu(pfs_inf->SectorsPerAllocationUnit);
kst->f_blocks = le64_to_cpu(pfs_inf->TotalAllocationUnits);
- kst->f_bfree = le64_to_cpu(pfs_inf->ActualAvailableAllocationUnits);
- kst->f_bavail = le64_to_cpu(pfs_inf->CallerAvailableAllocationUnits);
+ kst->f_bfree = kst->f_bavail =
+ le64_to_cpu(pfs_inf->CallerAvailableAllocationUnits);
return;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] cifs: Fix df output for users with quota limits
[not found] ` <20170803073903.31575-1-sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2017-08-23 19:42 ` Steve French
0 siblings, 0 replies; 2+ messages in thread
From: Steve French @ 2017-08-23 19:42 UTC (permalink / raw)
To: Sachin Prabhu; +Cc: linux-cifs
merged into cifs-2.6.git for-next and added cc: stable
On Thu, Aug 3, 2017 at 2:39 AM, Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
> The df for a SMB2 share triggers a GetInfo call for
> FS_FULL_SIZE_INFORMATION. The values returned are used to populate
> struct statfs.
>
> The problem is that none of the information returned by the call
> contains the total blocks available on the filesystem. Instead we use
> the blocks available to the user ie. quota limitation when filling out
> statfs.f_blocks. The information returned does contain Actual free units
> on the filesystem and is used to populate statfs.f_bfree. For users with
> quota enabled, it can lead to situations where the total free space
> reported is more than the total blocks on the system ending up with df
> reports like the following
>
> # df -h /mnt/a
> Filesystem Size Used Avail Use% Mounted on
> //192.168.22.10/a 2.5G -2.3G 2.5G - /mnt/a
>
> To fix this problem, we instead populate both statfs.f_bfree with the
> same value as statfs.f_bavail ie. CallerAvailableAllocationUnits. This
> is similar to what is done already in the code for cifs and df now
> reports the quota information for the user used to mount the share.
>
> # df --si /mnt/a
> Filesystem Size Used Avail Use% Mounted on
> //192.168.22.10/a 2.7G 101M 2.6G 4% /mnt/a
>
> Signed-off-by: Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> Signed-off-by: Pierguido Lambri <plambri-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
> fs/cifs/smb2pdu.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
> index 5fb2fc2..97edb4d3 100644
> --- a/fs/cifs/smb2pdu.c
> +++ b/fs/cifs/smb2pdu.c
> @@ -3219,8 +3219,8 @@ copy_fs_info_to_kstatfs(struct smb2_fs_full_size_info *pfs_inf,
> kst->f_bsize = le32_to_cpu(pfs_inf->BytesPerSector) *
> le32_to_cpu(pfs_inf->SectorsPerAllocationUnit);
> kst->f_blocks = le64_to_cpu(pfs_inf->TotalAllocationUnits);
> - kst->f_bfree = le64_to_cpu(pfs_inf->ActualAvailableAllocationUnits);
> - kst->f_bavail = le64_to_cpu(pfs_inf->CallerAvailableAllocationUnits);
> + kst->f_bfree = kst->f_bavail =
> + le64_to_cpu(pfs_inf->CallerAvailableAllocationUnits);
> return;
> }
>
> --
> 2.9.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Thanks,
Steve
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-08-23 19:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-03 7:39 [PATCH] cifs: Fix df output for users with quota limits Sachin Prabhu
[not found] ` <20170803073903.31575-1-sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-23 19:42 ` Steve French
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox