| .. | .. | 
|---|
 | 1 | +// SPDX-License-Identifier: GPL-2.0-only  | 
|---|
| 1 | 2 |  /* | 
|---|
| 2 | 3 |   *  linux/fs/ufs/super.c | 
|---|
| 3 | 4 |   * | 
|---|
| .. | .. | 
|---|
| 842 | 843 |   | 
|---|
| 843 | 844 |  	sb->s_maxbytes = MAX_LFS_FILESIZE; | 
|---|
| 844 | 845 |   | 
|---|
 | 846 | +	sb->s_time_gran = NSEC_PER_SEC;  | 
|---|
 | 847 | +	sb->s_time_min = S32_MIN;  | 
|---|
 | 848 | +	sb->s_time_max = S32_MAX;  | 
|---|
 | 849 | +  | 
|---|
| 845 | 850 |  	switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) { | 
|---|
| 846 | 851 |  	case UFS_MOUNT_UFSTYPE_44BSD: | 
|---|
| 847 | 852 |  		UFSD("ufstype=44bsd\n"); | 
|---|
| .. | .. | 
|---|
| 860 | 865 |  		uspi->s_fshift = 9; | 
|---|
| 861 | 866 |  		uspi->s_sbsize = super_block_size = 1536; | 
|---|
| 862 | 867 |  		uspi->s_sbbase =  0; | 
|---|
 | 868 | +		sb->s_time_gran = 1;  | 
|---|
 | 869 | +		sb->s_time_min = S64_MIN;  | 
|---|
 | 870 | +		sb->s_time_max = S64_MAX;  | 
|---|
| 863 | 871 |  		flags |= UFS_TYPE_UFS2 | UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD; | 
|---|
| 864 | 872 |  		break; | 
|---|
| 865 | 873 |  		 | 
|---|
| .. | .. | 
|---|
| 1406 | 1414 |  	struct super_block *sb = dentry->d_sb; | 
|---|
| 1407 | 1415 |  	struct ufs_sb_private_info *uspi= UFS_SB(sb)->s_uspi; | 
|---|
| 1408 | 1416 |  	unsigned  flags = UFS_SB(sb)->s_flags; | 
|---|
| 1409 |  | -	struct ufs_super_block_third *usb3;  | 
|---|
| 1410 | 1417 |  	u64 id = huge_encode_dev(sb->s_bdev->bd_dev); | 
|---|
| 1411 | 1418 |   | 
|---|
| 1412 | 1419 |  	mutex_lock(&UFS_SB(sb)->s_lock); | 
|---|
| 1413 |  | -	usb3 = ubh_get_usb_third(uspi);  | 
|---|
| 1414 | 1420 |  	 | 
|---|
| 1415 | 1421 |  	if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) | 
|---|
| 1416 | 1422 |  		buf->f_type = UFS2_MAGIC; | 
|---|
| .. | .. | 
|---|
| 1425 | 1431 |  		? (buf->f_bfree - uspi->s_root_blocks) : 0; | 
|---|
| 1426 | 1432 |  	buf->f_files = uspi->s_ncg * uspi->s_ipg; | 
|---|
| 1427 | 1433 |  	buf->f_namelen = UFS_MAXNAMLEN; | 
|---|
| 1428 |  | -	buf->f_fsid.val[0] = (u32)id;  | 
|---|
| 1429 |  | -	buf->f_fsid.val[1] = (u32)(id >> 32);  | 
|---|
 | 1434 | +	buf->f_fsid = u64_to_fsid(id);  | 
|---|
| 1430 | 1435 |   | 
|---|
| 1431 | 1436 |  	mutex_unlock(&UFS_SB(sb)->s_lock); | 
|---|
| 1432 | 1437 |   | 
|---|
| .. | .. | 
|---|
| 1449 | 1454 |  	return &ei->vfs_inode; | 
|---|
| 1450 | 1455 |  } | 
|---|
| 1451 | 1456 |   | 
|---|
| 1452 |  | -static void ufs_i_callback(struct rcu_head *head)  | 
|---|
 | 1457 | +static void ufs_free_in_core_inode(struct inode *inode)  | 
|---|
| 1453 | 1458 |  { | 
|---|
| 1454 |  | -	struct inode *inode = container_of(head, struct inode, i_rcu);  | 
|---|
| 1455 | 1459 |  	kmem_cache_free(ufs_inode_cachep, UFS_I(inode)); | 
|---|
| 1456 |  | -}  | 
|---|
| 1457 |  | -  | 
|---|
| 1458 |  | -static void ufs_destroy_inode(struct inode *inode)  | 
|---|
| 1459 |  | -{  | 
|---|
| 1460 |  | -	call_rcu(&inode->i_rcu, ufs_i_callback);  | 
|---|
| 1461 | 1460 |  } | 
|---|
| 1462 | 1461 |   | 
|---|
| 1463 | 1462 |  static void init_once(void *foo) | 
|---|
| .. | .. | 
|---|
| 1494 | 1493 |   | 
|---|
| 1495 | 1494 |  static const struct super_operations ufs_super_ops = { | 
|---|
| 1496 | 1495 |  	.alloc_inode	= ufs_alloc_inode, | 
|---|
| 1497 |  | -	.destroy_inode	= ufs_destroy_inode,  | 
|---|
 | 1496 | +	.free_inode	= ufs_free_in_core_inode,  | 
|---|
| 1498 | 1497 |  	.write_inode	= ufs_write_inode, | 
|---|
| 1499 | 1498 |  	.evict_inode	= ufs_evict_inode, | 
|---|
| 1500 | 1499 |  	.put_super	= ufs_put_super, | 
|---|
| .. | .. | 
|---|
| 1543 | 1542 |  module_init(init_ufs_fs) | 
|---|
| 1544 | 1543 |  module_exit(exit_ufs_fs) | 
|---|
| 1545 | 1544 |  MODULE_LICENSE("GPL"); | 
|---|
 | 1545 | +MODULE_IMPORT_NS(ANDROID_GKI_VFS_EXPORT_ONLY);  | 
|---|