FAILED: Patch "ksmbd: retrieve number of blocks using vfs_getattr in set_file_allocation_info" failed to apply to 5.10-stable tree
Subsystems (3)
Sasha Levin
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Thanks,
Sasha
------------------ original commit in Linus's tree ------------------
From 34cd86b6632718b7df3999d96f51e63de41c5e4f Mon Sep 17 00:00:00 2001
From: Marios Makassikis <[email protected]>
Date: Thu, 22 Feb 2024 10:58:21 +0100
Subject: [PATCH] ksmbd: retrieve number of blocks using vfs_getattr in
set_file_allocation_info
Use vfs_getattr() to retrieve stat information, rather than make assumptions about how a filesystem fills inode structs.
Signed-off-by Marios Makassikis <[email protected]>
Acked-by Namjae Jeon <[email protected]>
Signed-off-by Steve French <[email protected]>
--- fs/smb/server/smb2pdu.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
fs/smb/server/smb2pdu.c +8 -2
@@ -5809,15 +5809,21 @@ static int set_file_allocation_info(struct ksmbd_work *work,loff_t alloc_blks;struct inode *inode; +struct kstat stat;int rc;if (!(fp->daccess &FILE_WRITE_DATA_LE ))return -EACCES ; + rc =vfs_getattr (&fp->filp->f_path, &stat,STATX_BASIC_STATS , +AT_STATX_SYNC_AS_STAT ); +if (rc) +return rc; + alloc_blks = (le64_to_cpu (file_alloc_info->AllocationSize) +511 ) >>9 ; inode =file_inode (fp->filp); -if (alloc_blks > inode->i_blocks) { +if (alloc_blks > stat.blocks) {smb_break_all_levII_oplock (work, fp,1 ); rc =vfs_fallocate (fp->filp,FALLOC_FL_KEEP_SIZE ,0 , alloc_blks *512 );
@@ -5825,7 +5831,7 @@ static int set_file_allocation_info(struct ksmbd_work *work,pr_err ("vfs_fallocate is failed : %d\n" , rc);return rc; } - }else if (alloc_blks < inode->i_blocks) { + }else if (alloc_blks < stat.blocks) {loff_t size;/*
Signature · 1 line
2.43.0