erofs: reserve physical_clusterbits[]
authorGao Xiang <hsiangkao@redhat.com>
Wed, 7 Apr 2021 04:39:18 +0000 (12:39 +0800)
committerGao Xiang <hsiangkao@redhat.com>
Wed, 7 Apr 2021 04:41:22 +0000 (12:41 +0800)
Formal big pcluster design is actually more powerful / flexable than
the previous thought whose pclustersize was fixed as power-of-2 blocks,
which was obviously inefficient and space-wasting. Instead, pclustersize
can now be set independently for each pcluster, so various pcluster
sizes can also be used together in one file if mkfs wants (for example,
according to data type and/or compression ratio).

Let's get rid of previous physical_clusterbits[] setting (also notice
that corresponding on-disk fields are still 0 for now). Therefore,
head1/2 can be used for at most 2 different algorithms in one file and
again pclustersize is now independent of these.

Link: https://lore.kernel.org/r/20210407043927.10623-2-xiang@kernel.org
Acked-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
fs/erofs/erofs_fs.h
fs/erofs/internal.h
fs/erofs/zdata.c
fs/erofs/zmap.c

index 17bc0b5f117ddd419c14501074a403dd30ca4173..626b7d3e9ab7d6c3e4d3934795128557c1f2cd2f 100644 (file)
@@ -233,9 +233,7 @@ struct z_erofs_map_header {
        __u8    h_algorithmtype;
        /*
         * bit 0-2 : logical cluster bits - 12, e.g. 0 for 4096;
-        * bit 3-4 : (physical - logical) cluster bits of head 1:
-        *       For example, if logical clustersize = 4096, 1 for 8192.
-        * bit 5-7 : (physical - logical) cluster bits of head 2.
+        * bit 3-7 : reserved.
         */
        __u8    h_clusterbits;
 };
index 60063bbbb91a9c922d7740533ac1d712f02afd49..05b02f99324c1a5f1531a334b31bb71036fabac3 100644 (file)
@@ -266,7 +266,6 @@ struct erofs_inode {
                        unsigned short z_advise;
                        unsigned char  z_algorithmtype[2];
                        unsigned char  z_logical_clusterbits;
-                       unsigned char  z_physical_clusterbits[2];
                };
 #endif /* CONFIG_EROFS_FS_ZIP */
        };
index 4226f4115981f9c11359b245f63961490db1a590..e3f0100d82d1b5d06eb230437940667cb14cb205 100644 (file)
@@ -430,8 +430,7 @@ static int z_erofs_register_collection(struct z_erofs_collector *clt,
        else
                pcl->algorithmformat = Z_EROFS_COMPRESSION_SHIFTED;
 
-       pcl->clusterbits = EROFS_I(inode)->z_physical_clusterbits[0];
-       pcl->clusterbits -= PAGE_SHIFT;
+       pcl->clusterbits = 0;
 
        /* new pclusters should be claimed as type 1, primary and followed */
        pcl->next = clt->owned_head;
index b384f546d36823ad6facb016bb67ad7bbdf63081..7fd6bd843471fdc6975fa773597b6908cefa6cd0 100644 (file)
@@ -17,11 +17,8 @@ int z_erofs_fill_inode(struct inode *inode)
                vi->z_algorithmtype[0] = 0;
                vi->z_algorithmtype[1] = 0;
                vi->z_logical_clusterbits = LOG_BLOCK_SIZE;
-               vi->z_physical_clusterbits[0] = vi->z_logical_clusterbits;
-               vi->z_physical_clusterbits[1] = vi->z_logical_clusterbits;
                set_bit(EROFS_I_Z_INITED_BIT, &vi->flags);
        }
-
        inode->i_mapping->a_ops = &z_erofs_aops;
        return 0;
 }
@@ -77,18 +74,6 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
        }
 
        vi->z_logical_clusterbits = LOG_BLOCK_SIZE + (h->h_clusterbits & 7);
-       vi->z_physical_clusterbits[0] = vi->z_logical_clusterbits +
-                                       ((h->h_clusterbits >> 3) & 3);
-
-       if (vi->z_physical_clusterbits[0] != LOG_BLOCK_SIZE) {
-               erofs_err(sb, "unsupported physical clusterbits %u for nid %llu, please upgrade kernel",
-                         vi->z_physical_clusterbits[0], vi->nid);
-               err = -EOPNOTSUPP;
-               goto unmap_done;
-       }
-
-       vi->z_physical_clusterbits[1] = vi->z_logical_clusterbits +
-                                       ((h->h_clusterbits >> 5) & 7);
        /* paired with smp_mb() at the beginning of the function */
        smp_mb();
        set_bit(EROFS_I_Z_INITED_BIT, &vi->flags);