NTFS: Split ntfs_aops into ntfs_normal_aops and ntfs_compressed_aops
authorAnton Altaparmakov <anton@tuxera.com>
Thu, 16 Oct 2014 11:28:03 +0000 (12:28 +0100)
committerAnton Altaparmakov <anton@tuxera.com>
Thu, 16 Oct 2014 11:28:03 +0000 (12:28 +0100)
in preparation for them diverging.

Signed-off-by: Anton Altaparmakov <anton@tuxera.com>
fs/ntfs/aops.c
fs/ntfs/inode.c
fs/ntfs/ntfs.h

index d267ea6aa1a0ecc2f405fd4cdcca1bfdd4e66aa2..6f0f98176b10f66269022802fb7fe916ffaeb6ad 100644 (file)
@@ -1,8 +1,7 @@
 /**
  * aops.c - NTFS kernel address space operations and page cache handling.
- *         Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2007 Anton Altaparmakov
+ * Copyright (c) 2001-2014 Anton Altaparmakov and Tuxera Inc.
  * Copyright (c) 2002 Richard Russon
  *
  * This program/include file is free software; you can redistribute it and/or
@@ -1539,16 +1538,33 @@ err_out:
 #endif /* NTFS_RW */
 
 /**
- * ntfs_aops - general address space operations for inodes and attributes
+ * ntfs_normal_aops - address space operations for normal inodes and attributes
+ *
+ * Note these are not used for compressed or mst protected inodes and
+ * attributes.
  */
-const struct address_space_operations ntfs_aops = {
-       .readpage       = ntfs_readpage,        /* Fill page with data. */
+const struct address_space_operations ntfs_normal_aops = {
+       .readpage       = ntfs_readpage,
 #ifdef NTFS_RW
-       .writepage      = ntfs_writepage,       /* Write dirty page to disk. */
+       .writepage      = ntfs_writepage,
+       .set_page_dirty = __set_page_dirty_buffers,
+#endif /* NTFS_RW */
+       .migratepage    = buffer_migrate_page,
+       .is_partially_uptodate = block_is_partially_uptodate,
+       .error_remove_page = generic_error_remove_page,
+};
+
+/**
+ * ntfs_compressed_aops - address space operations for compressed inodes
+ */
+const struct address_space_operations ntfs_compressed_aops = {
+       .readpage       = ntfs_readpage,
+#ifdef NTFS_RW
+       .writepage      = ntfs_writepage,
+       .set_page_dirty = __set_page_dirty_buffers,
 #endif /* NTFS_RW */
-       .migratepage    = buffer_migrate_page,  /* Move a page cache page from
-                                                  one physical page to an
-                                                  other. */
+       .migratepage    = buffer_migrate_page,
+       .is_partially_uptodate = block_is_partially_uptodate,
        .error_remove_page = generic_error_remove_page,
 };
 
@@ -1564,9 +1580,8 @@ const struct address_space_operations ntfs_mst_aops = {
                                                   without touching the buffers
                                                   belonging to the page. */
 #endif /* NTFS_RW */
-       .migratepage    = buffer_migrate_page,  /* Move a page cache page from
-                                                  one physical page to an
-                                                  other. */
+       .migratepage    = buffer_migrate_page,
+       .is_partially_uptodate  = block_is_partially_uptodate,
        .error_remove_page = generic_error_remove_page,
 };
 
index f47af5e6e23037ed0c82b17274b098d00a617517..898b9949d36357a8b7998600f3fdbacaa498d08f 100644 (file)
@@ -1,7 +1,7 @@
 /**
- * inode.c - NTFS kernel inode handling. Part of the Linux-NTFS project.
+ * inode.c - NTFS kernel inode handling.
  *
- * Copyright (c) 2001-2007 Anton Altaparmakov
+ * Copyright (c) 2001-2014 Anton Altaparmakov and Tuxera Inc.
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
@@ -1012,6 +1012,7 @@ skip_large_dir_stuff:
                /* Setup the operations for this inode. */
                vi->i_op = &ntfs_dir_inode_ops;
                vi->i_fop = &ntfs_dir_ops;
+               vi->i_mapping->a_ops = &ntfs_mst_aops;
        } else {
                /* It is a file. */
                ntfs_attr_reinit_search_ctx(ctx);
@@ -1160,11 +1161,12 @@ no_data_attr_special_case:
                /* Setup the operations for this inode. */
                vi->i_op = &ntfs_file_inode_ops;
                vi->i_fop = &ntfs_file_ops;
+               vi->i_mapping->a_ops = &ntfs_normal_aops;
+               if (NInoMstProtected(ni))
+                       vi->i_mapping->a_ops = &ntfs_mst_aops;
+               else if (NInoCompressed(ni))
+                       vi->i_mapping->a_ops = &ntfs_compressed_aops;
        }
-       if (NInoMstProtected(ni))
-               vi->i_mapping->a_ops = &ntfs_mst_aops;
-       else
-               vi->i_mapping->a_ops = &ntfs_aops;
        /*
         * The number of 512-byte blocks used on disk (for stat). This is in so
         * far inaccurate as it doesn't account for any named streams or other
@@ -1414,10 +1416,11 @@ static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
                ni->allocated_size = sle64_to_cpu(
                                a->data.non_resident.allocated_size);
        }
+       vi->i_mapping->a_ops = &ntfs_normal_aops;
        if (NInoMstProtected(ni))
                vi->i_mapping->a_ops = &ntfs_mst_aops;
-       else
-               vi->i_mapping->a_ops = &ntfs_aops;
+       else if (NInoCompressed(ni))
+               vi->i_mapping->a_ops = &ntfs_compressed_aops;
        if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT)
                vi->i_blocks = ni->itype.compressed.size >> 9;
        else
index d6a340bf80fce0e18909e037901e293c728dc27b..c581e26a350d5e15ebe4740a841da92c3ad4cf40 100644 (file)
@@ -1,8 +1,7 @@
 /*
- * ntfs.h - Defines for NTFS Linux kernel driver. Part of the Linux-NTFS
- *         project.
+ * ntfs.h - Defines for NTFS Linux kernel driver.
  *
- * Copyright (c) 2001-2005 Anton Altaparmakov
+ * Copyright (c) 2001-2014 Anton Altaparmakov and Tuxera Inc.
  * Copyright (C) 2002 Richard Russon
  *
  * This program/include file is free software; you can redistribute it and/or
@@ -57,7 +56,8 @@ extern struct kmem_cache *ntfs_attr_ctx_cache;
 extern struct kmem_cache *ntfs_index_ctx_cache;
 
 /* The various operations structs defined throughout the driver files. */
-extern const struct address_space_operations ntfs_aops;
+extern const struct address_space_operations ntfs_normal_aops;
+extern const struct address_space_operations ntfs_compressed_aops;
 extern const struct address_space_operations ntfs_mst_aops;
 
 extern const struct  file_operations ntfs_file_ops;