mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
smb/server: get compression file attribute on open
Example:
1. server: chattr +c /export/file
2. client: lsattr /mnt/file
--------c------------- /mnt/file
Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
9d357903ec
commit
e48b687221
|
|
@ -3604,7 +3604,10 @@ int smb2_open(struct ksmbd_work *work)
|
|||
|
||||
if (!created)
|
||||
smb2_update_xattrs(tcon, &path, fp);
|
||||
else
|
||||
|
||||
ksmbd_vfs_update_compressed_fattr(path.dentry, &fp->f_ci->m_fattr);
|
||||
|
||||
if (created)
|
||||
smb2_new_xattrs(tcon, &path, fp);
|
||||
|
||||
memcpy(fp->client_guid, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#include <linux/sched/xacct.h>
|
||||
#include <linux/crc32c.h>
|
||||
#include <linux/splice.h>
|
||||
#include <linux/fileattr.h>
|
||||
|
||||
#include "glob.h"
|
||||
#include "oplock.h"
|
||||
|
|
@ -1881,3 +1882,20 @@ int ksmbd_vfs_inherit_posix_acl(struct mnt_idmap *idmap,
|
|||
posix_acl_release(acls);
|
||||
return rc;
|
||||
}
|
||||
|
||||
void ksmbd_vfs_update_compressed_fattr(struct dentry *dentry, __le32 *fattr)
|
||||
{
|
||||
int rc;
|
||||
struct file_kattr fa = { .flags_valid = true };
|
||||
|
||||
rc = vfs_fileattr_get(dentry, &fa);
|
||||
if (rc == -ENOIOCTLCMD)
|
||||
*fattr &= ~FILE_ATTRIBUTE_COMPRESSED_LE;
|
||||
if (rc)
|
||||
return;
|
||||
|
||||
if (fa.flags & FS_COMPR_FL)
|
||||
*fattr |= FILE_ATTRIBUTE_COMPRESSED_LE;
|
||||
else
|
||||
*fattr &= ~FILE_ATTRIBUTE_COMPRESSED_LE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -168,4 +168,5 @@ int ksmbd_vfs_set_init_posix_acl(struct mnt_idmap *idmap,
|
|||
int ksmbd_vfs_inherit_posix_acl(struct mnt_idmap *idmap,
|
||||
const struct path *path,
|
||||
struct inode *parent_inode);
|
||||
void ksmbd_vfs_update_compressed_fattr(struct dentry *dentry, __le32 *fattr);
|
||||
#endif /* __KSMBD_VFS_H__ */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user