* [PATCH 0/3] fs/ntfs3: Refactoring and hidedotfiles option @ 2022-09-12 16:37 Konstantin Komarov 2022-09-12 16:39 ` [PATCH 1/3] fs/ntfs3: Add comments about cluster size Konstantin Komarov ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Konstantin Komarov @ 2022-09-12 16:37 UTC (permalink / raw) To: ntfs3; +Cc: linux-kernel, linux-fsdevel Added some info about CONFIG_NTFS3_64BIT_CLUSTER and hidedotfiles option Konstantin Komarov (3): fs/ntfs3: Add comments about cluster size fs/ntfs3: Add hidedotfiles option fs/ntfs3: Change destroy_inode to free_inode fs/ntfs3/frecord.c | 2 +- fs/ntfs3/inode.c | 4 ++++ fs/ntfs3/ntfs_fs.h | 1 + fs/ntfs3/record.c | 4 ++++ fs/ntfs3/super.c | 52 ++++++++++++++++++++++++++++++++-------------- 5 files changed, 46 insertions(+), 17 deletions(-) -- 2.37.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] fs/ntfs3: Add comments about cluster size 2022-09-12 16:37 [PATCH 0/3] fs/ntfs3: Refactoring and hidedotfiles option Konstantin Komarov @ 2022-09-12 16:39 ` Konstantin Komarov 2022-09-12 16:40 ` [PATCH 2/3] fs/ntfs3: Add hidedotfiles option Konstantin Komarov 2022-09-12 16:40 ` [PATCH 3/3] fs/ntfs3: Change destroy_inode to free_inode Konstantin Komarov 2 siblings, 0 replies; 5+ messages in thread From: Konstantin Komarov @ 2022-09-12 16:39 UTC (permalink / raw) To: ntfs3; +Cc: linux-kernel, linux-fsdevel This commit adds additional info about CONFIG_NTFS3_64BIT_CLUSTER Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com> --- fs/ntfs3/frecord.c | 2 +- fs/ntfs3/record.c | 4 ++++ fs/ntfs3/super.c | 24 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 381a38a06ec2..b752d83cf460 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -557,7 +557,7 @@ static int ni_repack(struct ntfs_inode *ni) } if (!mi_p) { - /* Do not try if not enogh free space. */ + /* Do not try if not enough free space. */ if (le32_to_cpu(mi->mrec->used) + 8 >= rs) continue; diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c index 7d2fac5ee215..c8741cfa421f 100644 --- a/fs/ntfs3/record.c +++ b/fs/ntfs3/record.c @@ -537,6 +537,10 @@ bool mi_resize_attr(struct mft_inode *mi, struct ATTRIB *attr, int bytes) return true; } +/* + * Pack runs in MFT record. + * If failed record is not changed. + */ int mi_pack_runs(struct mft_inode *mi, struct ATTRIB *attr, struct runs_tree *run, CLST len) { diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c index 47012c9bf505..86ff55133faf 100644 --- a/fs/ntfs3/super.c +++ b/fs/ntfs3/super.c @@ -21,6 +21,30 @@ * https://docs.microsoft.com/en-us/windows/wsl/file-permissions * It stores uid/gid/mode/dev in xattr * + * ntfs allows up to 2^64 clusters per volume. + * It means you should use 64 bits lcn to operate with ntfs. + * Implementation of ntfs.sys uses only 32 bits lcn. + * Default ntfs3 uses 32 bits lcn too. + * ntfs3 built with CONFIG_NTFS3_64BIT_CLUSTER (ntfs3_64) uses 64 bits per lcn. + * + * + * ntfs limits, cluster size is 4K (2^12) + * ----------------------------------------------------------------------------- + * | Volume size | Clusters | ntfs.sys | ntfs3 | ntfs3_64 | mkntfs | chkdsk | + * ----------------------------------------------------------------------------- + * | < 16T, 2^44 | < 2^32 | yes | yes | yes | yes | yes | + * | > 16T, 2^44 | > 2^32 | no | no | yes | yes | yes | + * ----------------------------------------------------------|------------------ + * + * To mount large volumes as ntfs one should use large cluster size (up to 2M) + * The maximum volume size in this case is 2^32 * 2^21 = 2^53 = 8P + * + * ntfs limits, cluster size is 2M (2^31) + * ----------------------------------------------------------------------------- + * | < 8P, 2^54 | < 2^32 | yes | yes | yes | yes | yes | + * | > 8P, 2^54 | > 2^32 | no | no | yes | yes | yes | + * ----------------------------------------------------------|------------------ + * */ #include <linux/blkdev.h> -- 2.37.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] fs/ntfs3: Add hidedotfiles option 2022-09-12 16:37 [PATCH 0/3] fs/ntfs3: Refactoring and hidedotfiles option Konstantin Komarov 2022-09-12 16:39 ` [PATCH 1/3] fs/ntfs3: Add comments about cluster size Konstantin Komarov @ 2022-09-12 16:40 ` Konstantin Komarov 2022-10-03 22:51 ` Daniel Pinto 2022-09-12 16:40 ` [PATCH 3/3] fs/ntfs3: Change destroy_inode to free_inode Konstantin Komarov 2 siblings, 1 reply; 5+ messages in thread From: Konstantin Komarov @ 2022-09-12 16:40 UTC (permalink / raw) To: ntfs3; +Cc: linux-kernel, linux-fsdevel With this option all files with filename[0] == '.' will have FILE_ATTRIBUTE_HIDDEN attribute. Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com> --- fs/ntfs3/inode.c | 4 ++++ fs/ntfs3/ntfs_fs.h | 1 + fs/ntfs3/super.c | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 51363d4e8636..40b8565815a2 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -1257,6 +1257,10 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, fa = FILE_ATTRIBUTE_ARCHIVE; } + /* If option "hidedotfiles" then set hidden attribute for dot files. */ + if (sbi->options->hide_dot_files && name->name[0] == '.') + fa |= FILE_ATTRIBUTE_HIDDEN; + if (!(mode & 0222)) fa |= FILE_ATTRIBUTE_READONLY; diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index 2c791222c4e2..cd680ada50ab 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -97,6 +97,7 @@ struct ntfs_mount_options { unsigned sparse : 1; /* Create sparse files. */ unsigned showmeta : 1; /* Show meta files. */ unsigned nohidden : 1; /* Do not show hidden files. */ + unsigned hide_dot_files : 1; /* Set hidden flag on dot files. */ unsigned force : 1; /* RW mount dirty volume. */ unsigned noacsrules : 1; /* Exclude acs rules. */ unsigned prealloc : 1; /* Preallocate space when file is growing. */ diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c index 86ff55133faf..067a0e9cf590 100644 --- a/fs/ntfs3/super.c +++ b/fs/ntfs3/super.c @@ -247,6 +247,7 @@ enum Opt { Opt_force, Opt_sparse, Opt_nohidden, + Opt_hide_dot_files, Opt_showmeta, Opt_acl, Opt_iocharset, @@ -266,6 +267,7 @@ static const struct fs_parameter_spec ntfs_fs_parameters[] = { fsparam_flag_no("force", Opt_force), fsparam_flag_no("sparse", Opt_sparse), fsparam_flag_no("hidden", Opt_nohidden), + fsparam_flag_no("hidedotfiles", Opt_hide_dot_files), fsparam_flag_no("acl", Opt_acl), fsparam_flag_no("showmeta", Opt_showmeta), fsparam_flag_no("prealloc", Opt_prealloc), @@ -357,6 +359,9 @@ static int ntfs_fs_parse_param(struct fs_context *fc, case Opt_nohidden: opts->nohidden = result.negated ? 1 : 0; break; + case Opt_hide_dot_files: + opts->hide_dot_files = result.negated ? 1 : 0; + break; case Opt_acl: if (!result.negated) #ifdef CONFIG_NTFS3_FS_POSIX_ACL -- 2.37.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] fs/ntfs3: Add hidedotfiles option 2022-09-12 16:40 ` [PATCH 2/3] fs/ntfs3: Add hidedotfiles option Konstantin Komarov @ 2022-10-03 22:51 ` Daniel Pinto 0 siblings, 0 replies; 5+ messages in thread From: Daniel Pinto @ 2022-10-03 22:51 UTC (permalink / raw) To: Konstantin Komarov, ntfs3; +Cc: linux-kernel, linux-fsdevel Às 17:40 de 12/09/22, Konstantin Komarov escreveu: > With this option all files with filename[0] == '.' > will have FILE_ATTRIBUTE_HIDDEN attribute. > > Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com> > --- > fs/ntfs3/inode.c | 4 ++++ > fs/ntfs3/ntfs_fs.h | 1 + > fs/ntfs3/super.c | 5 +++++ > 3 files changed, 10 insertions(+) > > diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c > index 51363d4e8636..40b8565815a2 100644 > --- a/fs/ntfs3/inode.c > +++ b/fs/ntfs3/inode.c > @@ -1257,6 +1257,10 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, > fa = FILE_ATTRIBUTE_ARCHIVE; > } > > + /* If option "hidedotfiles" then set hidden attribute for dot files. */ > + if (sbi->options->hide_dot_files && name->name[0] == '.') > + fa |= FILE_ATTRIBUTE_HIDDEN; > + > if (!(mode & 0222)) > fa |= FILE_ATTRIBUTE_READONLY; > > diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h > index 2c791222c4e2..cd680ada50ab 100644 > --- a/fs/ntfs3/ntfs_fs.h > +++ b/fs/ntfs3/ntfs_fs.h > @@ -97,6 +97,7 @@ struct ntfs_mount_options { > unsigned sparse : 1; /* Create sparse files. */ > unsigned showmeta : 1; /* Show meta files. */ > unsigned nohidden : 1; /* Do not show hidden files. */ > + unsigned hide_dot_files : 1; /* Set hidden flag on dot files. */ > unsigned force : 1; /* RW mount dirty volume. */ > unsigned noacsrules : 1; /* Exclude acs rules. */ > unsigned prealloc : 1; /* Preallocate space when file is growing. */ > diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c > index 86ff55133faf..067a0e9cf590 100644 > --- a/fs/ntfs3/super.c > +++ b/fs/ntfs3/super.c > @@ -247,6 +247,7 @@ enum Opt { > Opt_force, > Opt_sparse, > Opt_nohidden, > + Opt_hide_dot_files, > Opt_showmeta, > Opt_acl, > Opt_iocharset, > @@ -266,6 +267,7 @@ static const struct fs_parameter_spec ntfs_fs_parameters[] = { > fsparam_flag_no("force", Opt_force), > fsparam_flag_no("sparse", Opt_sparse), > fsparam_flag_no("hidden", Opt_nohidden), > + fsparam_flag_no("hidedotfiles", Opt_hide_dot_files), > fsparam_flag_no("acl", Opt_acl), > fsparam_flag_no("showmeta", Opt_showmeta), > fsparam_flag_no("prealloc", Opt_prealloc), > @@ -357,6 +359,9 @@ static int ntfs_fs_parse_param(struct fs_context *fc, > case Opt_nohidden: > opts->nohidden = result.negated ? 1 : 0; > break; > + case Opt_hide_dot_files: > + opts->hide_dot_files = result.negated ? 1 : 0; I believe the 0 and 1 should be switched here. With the code as it is, the behaviour is the reverse of what is expected: the hidedotfiles mount option disables setting the hidden attribute and the nohidedotfiles enables it. > + break; > case Opt_acl: > if (!result.negated) > #ifdef CONFIG_NTFS3_FS_POSIX_ACL Hello, I have found a bug in your patch. I explained it above. Also, the patch will only set the hidden attribute when a new file or directory is created. It will not set it (or unset it) when files or directories are moved or renamed. Best regards, Daniel Pinto ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] fs/ntfs3: Change destroy_inode to free_inode 2022-09-12 16:37 [PATCH 0/3] fs/ntfs3: Refactoring and hidedotfiles option Konstantin Komarov 2022-09-12 16:39 ` [PATCH 1/3] fs/ntfs3: Add comments about cluster size Konstantin Komarov 2022-09-12 16:40 ` [PATCH 2/3] fs/ntfs3: Add hidedotfiles option Konstantin Komarov @ 2022-09-12 16:40 ` Konstantin Komarov 2 siblings, 0 replies; 5+ messages in thread From: Konstantin Komarov @ 2022-09-12 16:40 UTC (permalink / raw) To: ntfs3; +Cc: linux-kernel, linux-fsdevel Many filesystems already use free_inode callback, so we will use it too from now on. Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com> --- fs/ntfs3/super.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c index 067a0e9cf590..744c1f15ba2a 100644 --- a/fs/ntfs3/super.c +++ b/fs/ntfs3/super.c @@ -438,27 +438,18 @@ static struct inode *ntfs_alloc_inode(struct super_block *sb) return NULL; memset(ni, 0, offsetof(struct ntfs_inode, vfs_inode)); - mutex_init(&ni->ni_lock); - return &ni->vfs_inode; } -static void ntfs_i_callback(struct rcu_head *head) +static void ntfs_free_inode(struct inode *inode) { - struct inode *inode = container_of(head, struct inode, i_rcu); struct ntfs_inode *ni = ntfs_i(inode); mutex_destroy(&ni->ni_lock); - kmem_cache_free(ntfs_inode_cachep, ni); } -static void ntfs_destroy_inode(struct inode *inode) -{ - call_rcu(&inode->i_rcu, ntfs_i_callback); -} - static void init_once(void *foo) { struct ntfs_inode *ni = foo; @@ -624,7 +615,7 @@ static int ntfs_sync_fs(struct super_block *sb, int wait) static const struct super_operations ntfs_sops = { .alloc_inode = ntfs_alloc_inode, - .destroy_inode = ntfs_destroy_inode, + .free_inode = ntfs_free_inode, .evict_inode = ntfs_evict_inode, .put_super = ntfs_put_super, .statfs = ntfs_statfs, @@ -1520,11 +1511,8 @@ static int __init init_ntfs_fs(void) static void __exit exit_ntfs_fs(void) { - if (ntfs_inode_cachep) { - rcu_barrier(); - kmem_cache_destroy(ntfs_inode_cachep); - } - + rcu_barrier(); + kmem_cache_destroy(ntfs_inode_cachep); unregister_filesystem(&ntfs_fs_type); ntfs3_exit_bitmap(); } -- 2.37.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-10-03 22:51 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-09-12 16:37 [PATCH 0/3] fs/ntfs3: Refactoring and hidedotfiles option Konstantin Komarov 2022-09-12 16:39 ` [PATCH 1/3] fs/ntfs3: Add comments about cluster size Konstantin Komarov 2022-09-12 16:40 ` [PATCH 2/3] fs/ntfs3: Add hidedotfiles option Konstantin Komarov 2022-10-03 22:51 ` Daniel Pinto 2022-09-12 16:40 ` [PATCH 3/3] fs/ntfs3: Change destroy_inode to free_inode Konstantin Komarov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).