| .. | .. | 
|---|
 | 1 | +// SPDX-License-Identifier: GPL-2.0-only  | 
|---|
| 1 | 2 |  /* | 
|---|
| 2 | 3 |   *  linux/fs/affs/inode.c | 
|---|
| 3 | 4 |   * | 
|---|
| .. | .. | 
|---|
| 111 | 112 |  	return &i->vfs_inode; | 
|---|
| 112 | 113 |  } | 
|---|
| 113 | 114 |   | 
|---|
| 114 |  | -static void affs_i_callback(struct rcu_head *head)  | 
|---|
 | 115 | +static void affs_free_inode(struct inode *inode)  | 
|---|
| 115 | 116 |  { | 
|---|
| 116 |  | -	struct inode *inode = container_of(head, struct inode, i_rcu);  | 
|---|
| 117 | 117 |  	kmem_cache_free(affs_inode_cachep, AFFS_I(inode)); | 
|---|
| 118 |  | -}  | 
|---|
| 119 |  | -  | 
|---|
| 120 |  | -static void affs_destroy_inode(struct inode *inode)  | 
|---|
| 121 |  | -{  | 
|---|
| 122 |  | -	call_rcu(&inode->i_rcu, affs_i_callback);  | 
|---|
| 123 | 118 |  } | 
|---|
| 124 | 119 |   | 
|---|
| 125 | 120 |  static void init_once(void *foo) | 
|---|
| 126 | 121 |  { | 
|---|
| 127 | 122 |  	struct affs_inode_info *ei = (struct affs_inode_info *) foo; | 
|---|
| 128 | 123 |   | 
|---|
| 129 |  | -	sema_init(&ei->i_link_lock, 1);  | 
|---|
| 130 |  | -	sema_init(&ei->i_ext_lock, 1);  | 
|---|
 | 124 | +	mutex_init(&ei->i_link_lock);  | 
|---|
 | 125 | +	mutex_init(&ei->i_ext_lock);  | 
|---|
| 131 | 126 |  	inode_init_once(&ei->vfs_inode); | 
|---|
| 132 | 127 |  } | 
|---|
| 133 | 128 |   | 
|---|
| .. | .. | 
|---|
| 155 | 150 |   | 
|---|
| 156 | 151 |  static const struct super_operations affs_sops = { | 
|---|
| 157 | 152 |  	.alloc_inode	= affs_alloc_inode, | 
|---|
| 158 |  | -	.destroy_inode	= affs_destroy_inode,  | 
|---|
 | 153 | +	.free_inode	= affs_free_inode,  | 
|---|
| 159 | 154 |  	.write_inode	= affs_write_inode, | 
|---|
| 160 | 155 |  	.evict_inode	= affs_evict_inode, | 
|---|
| 161 | 156 |  	.put_super	= affs_put_super, | 
|---|
| .. | .. | 
|---|
| 360 | 355 |  	sb->s_op                = &affs_sops; | 
|---|
| 361 | 356 |  	sb->s_flags |= SB_NODIRATIME; | 
|---|
| 362 | 357 |   | 
|---|
 | 358 | +	sb->s_time_gran = NSEC_PER_SEC;  | 
|---|
 | 359 | +	sb->s_time_min = sys_tz.tz_minuteswest * 60 + AFFS_EPOCH_DELTA;  | 
|---|
 | 360 | +	sb->s_time_max = 86400LL * U32_MAX + 86400 + sb->s_time_min;  | 
|---|
 | 361 | +  | 
|---|
| 363 | 362 |  	sbi = kzalloc(sizeof(struct affs_sb_info), GFP_KERNEL); | 
|---|
| 364 | 363 |  	if (!sbi) | 
|---|
| 365 | 364 |  		return -ENOMEM; | 
|---|
| .. | .. | 
|---|
| 475 | 474 |  	case MUFS_INTLFFS: | 
|---|
| 476 | 475 |  	case MUFS_DCFFS: | 
|---|
| 477 | 476 |  		affs_set_opt(sbi->s_flags, SF_MUFS); | 
|---|
| 478 |  | -		/* fall thru */  | 
|---|
 | 477 | +		fallthrough;  | 
|---|
| 479 | 478 |  	case FS_INTLFFS: | 
|---|
| 480 | 479 |  	case FS_DCFFS: | 
|---|
| 481 | 480 |  		affs_set_opt(sbi->s_flags, SF_INTL); | 
|---|
| .. | .. | 
|---|
| 487 | 486 |  		break; | 
|---|
| 488 | 487 |  	case MUFS_OFS: | 
|---|
| 489 | 488 |  		affs_set_opt(sbi->s_flags, SF_MUFS); | 
|---|
| 490 |  | -		/* fall thru */  | 
|---|
 | 489 | +		fallthrough;  | 
|---|
| 491 | 490 |  	case FS_OFS: | 
|---|
| 492 | 491 |  		affs_set_opt(sbi->s_flags, SF_OFS); | 
|---|
| 493 | 492 |  		sb->s_flags |= SB_NOEXEC; | 
|---|
| .. | .. | 
|---|
| 495 | 494 |  	case MUFS_DCOFS: | 
|---|
| 496 | 495 |  	case MUFS_INTLOFS: | 
|---|
| 497 | 496 |  		affs_set_opt(sbi->s_flags, SF_MUFS); | 
|---|
 | 497 | +		fallthrough;  | 
|---|
| 498 | 498 |  	case FS_DCOFS: | 
|---|
| 499 | 499 |  	case FS_INTLOFS: | 
|---|
| 500 | 500 |  		affs_set_opt(sbi->s_flags, SF_INTL); | 
|---|
| .. | .. | 
|---|
| 620 | 620 |  	buf->f_blocks  = AFFS_SB(sb)->s_partition_size - AFFS_SB(sb)->s_reserved; | 
|---|
| 621 | 621 |  	buf->f_bfree   = free; | 
|---|
| 622 | 622 |  	buf->f_bavail  = free; | 
|---|
| 623 |  | -	buf->f_fsid.val[0] = (u32)id;  | 
|---|
| 624 |  | -	buf->f_fsid.val[1] = (u32)(id >> 32);  | 
|---|
 | 623 | +	buf->f_fsid    = u64_to_fsid(id);  | 
|---|
| 625 | 624 |  	buf->f_namelen = AFFSNAMEMAX; | 
|---|
| 626 | 625 |  	return 0; | 
|---|
| 627 | 626 |  } | 
|---|
| .. | .. | 
|---|
| 677 | 676 |   | 
|---|
| 678 | 677 |  MODULE_DESCRIPTION("Amiga filesystem support for Linux"); | 
|---|
| 679 | 678 |  MODULE_LICENSE("GPL"); | 
|---|
 | 679 | +MODULE_IMPORT_NS(ANDROID_GKI_VFS_EXPORT_ONLY);  | 
|---|
| 680 | 680 |   | 
|---|
| 681 | 681 |  module_init(init_affs_fs) | 
|---|
| 682 | 682 |  module_exit(exit_affs_fs) | 
|---|