ntfs3.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [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

* [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

* 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

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).