mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 08:38:45 +02:00 
			
		
		
		
	A one-liner that leads to a startling (but also very much rational)
performance improvement in cases where an IMA policy with rules that are based on fsmagic matching is enforced, an encryption-related fixup that addresses generic/397 and other fstest failures and a couple of cleanups in CephFS. -----BEGIN PGP SIGNATURE----- iQFHBAABCAAxFiEEydHwtzie9C7TfviiSn/eOAIR84sFAmhDKSQTHGlkcnlvbW92 QGdtYWlsLmNvbQAKCRBKf944AhHzi5ofCACeaTBV/Dwr90/P+j9sYOfoirVi9rps onoce9aMPxEgVHDuhmVSwVnta6Fw7XtD1xxpe3rc1km/zi2/pH/FjBNNWYPk5bjX 0+LPSqdf4HGBVmAFahLeYgB1beUznEd0saddoiq4tzY7DRpoD+yhfU8kHUzus8Ai 77yEU5kh3SoTUPPoat0ePIR3KdUIFZy7wKHF3oo6urp8RmOjFw+knZd44uPTpvd5 ApLzAwsGqJm7gwCSuB67TL3Wd0/6I+wnyNXKX8bYe090ZcPd6fy3WwIacTlo0CFu +tCenZBbVFXWVkv4LQtvIz+YlfmTZ31/HzgvLqb/33yjK+jWSzskDsBy =lFOg -----END PGP SIGNATURE----- Merge tag 'ceph-for-6.16-rc1' of https://github.com/ceph/ceph-client Pull ceph updates from Ilya Dryomov: - a one-liner that leads to a startling (but also very much rational) performance improvement in cases where an IMA policy with rules that are based on fsmagic matching is enforced - an encryption-related fixup that addresses generic/397 and other fstest failures - a couple of cleanups in CephFS * tag 'ceph-for-6.16-rc1' of https://github.com/ceph/ceph-client: ceph: fix variable dereferenced before check in ceph_umount_begin() ceph: set superblock s_magic for IMA fsmagic matching ceph: cleanup hardcoded constants of file handle size ceph: fix possible integer overflow in ceph_zero_objects() ceph: avoid kernel BUG for encrypted inode with unaligned file size
This commit is contained in:
		
						commit
						a3fb8a61e4
					
				
					 4 changed files with 25 additions and 11 deletions
				
			
		|  | @ -409,6 +409,15 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq) | |||
| 		struct page **pages; | ||||
| 		size_t page_off; | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * FIXME: io_iter.count needs to be corrected to aligned | ||||
| 		 * length. Otherwise, iov_iter_get_pages_alloc2() operates | ||||
| 		 * with the initial unaligned length value. As a result, | ||||
| 		 * ceph_msg_data_cursor_init() triggers BUG_ON() in the case | ||||
| 		 * if msg->sparse_read_total > msg->data_length. | ||||
| 		 */ | ||||
| 		subreq->io_iter.count = len; | ||||
| 
 | ||||
| 		err = iov_iter_get_pages_alloc2(&subreq->io_iter, &pages, len, &page_off); | ||||
| 		if (err < 0) { | ||||
| 			doutc(cl, "%llx.%llx failed to allocate pages, %d\n", | ||||
|  |  | |||
|  | @ -33,12 +33,19 @@ struct ceph_nfs_snapfh { | |||
| 	u32 hash; | ||||
| } __attribute__ ((packed)); | ||||
| 
 | ||||
| #define BYTES_PER_U32		(sizeof(u32)) | ||||
| #define CEPH_FH_BASIC_SIZE \ | ||||
| 	(sizeof(struct ceph_nfs_fh) / BYTES_PER_U32) | ||||
| #define CEPH_FH_WITH_PARENT_SIZE \ | ||||
| 	(sizeof(struct ceph_nfs_confh) / BYTES_PER_U32) | ||||
| #define CEPH_FH_SNAPPED_INODE_SIZE \ | ||||
| 	(sizeof(struct ceph_nfs_snapfh) / BYTES_PER_U32) | ||||
| 
 | ||||
| static int ceph_encode_snapfh(struct inode *inode, u32 *rawfh, int *max_len, | ||||
| 			      struct inode *parent_inode) | ||||
| { | ||||
| 	struct ceph_client *cl = ceph_inode_to_client(inode); | ||||
| 	static const int snap_handle_length = | ||||
| 		sizeof(struct ceph_nfs_snapfh) >> 2; | ||||
| 	static const int snap_handle_length = CEPH_FH_SNAPPED_INODE_SIZE; | ||||
| 	struct ceph_nfs_snapfh *sfh = (void *)rawfh; | ||||
| 	u64 snapid = ceph_snap(inode); | ||||
| 	int ret; | ||||
|  | @ -88,10 +95,8 @@ static int ceph_encode_fh(struct inode *inode, u32 *rawfh, int *max_len, | |||
| 			  struct inode *parent_inode) | ||||
| { | ||||
| 	struct ceph_client *cl = ceph_inode_to_client(inode); | ||||
| 	static const int handle_length = | ||||
| 		sizeof(struct ceph_nfs_fh) >> 2; | ||||
| 	static const int connected_handle_length = | ||||
| 		sizeof(struct ceph_nfs_confh) >> 2; | ||||
| 	static const int handle_length = CEPH_FH_BASIC_SIZE; | ||||
| 	static const int connected_handle_length = CEPH_FH_WITH_PARENT_SIZE; | ||||
| 	int type; | ||||
| 
 | ||||
| 	if (ceph_snap(inode) != CEPH_NOSNAP) | ||||
|  | @ -308,7 +313,7 @@ static struct dentry *ceph_fh_to_dentry(struct super_block *sb, | |||
| 	if (fh_type != FILEID_INO32_GEN  && | ||||
| 	    fh_type != FILEID_INO32_GEN_PARENT) | ||||
| 		return NULL; | ||||
| 	if (fh_len < sizeof(*fh) / 4) | ||||
| 	if (fh_len < sizeof(*fh) / BYTES_PER_U32) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	doutc(fsc->client, "%llx\n", fh->ino); | ||||
|  | @ -427,7 +432,7 @@ static struct dentry *ceph_fh_to_parent(struct super_block *sb, | |||
| 
 | ||||
| 	if (fh_type != FILEID_INO32_GEN_PARENT) | ||||
| 		return NULL; | ||||
| 	if (fh_len < sizeof(*cfh) / 4) | ||||
| 	if (fh_len < sizeof(*cfh) / BYTES_PER_U32) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	doutc(fsc->client, "%llx\n", cfh->parent_ino); | ||||
|  |  | |||
|  | @ -2616,7 +2616,7 @@ static int ceph_zero_objects(struct inode *inode, loff_t offset, loff_t length) | |||
| 	s32 stripe_unit = ci->i_layout.stripe_unit; | ||||
| 	s32 stripe_count = ci->i_layout.stripe_count; | ||||
| 	s32 object_size = ci->i_layout.object_size; | ||||
| 	u64 object_set_size = object_size * stripe_count; | ||||
| 	u64 object_set_size = (u64) object_size * stripe_count; | ||||
| 	u64 nearly, t; | ||||
| 
 | ||||
| 	/* round offset up to next period boundary */ | ||||
|  |  | |||
|  | @ -1033,8 +1033,7 @@ void ceph_umount_begin(struct super_block *sb) | |||
| 	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); | ||||
| 
 | ||||
| 	doutc(fsc->client, "starting forced umount\n"); | ||||
| 	if (!fsc) | ||||
| 		return; | ||||
| 
 | ||||
| 	fsc->mount_state = CEPH_MOUNT_SHUTDOWN; | ||||
| 	__ceph_umount_begin(fsc); | ||||
| } | ||||
|  | @ -1227,6 +1226,7 @@ static int ceph_set_super(struct super_block *s, struct fs_context *fc) | |||
| 	s->s_time_min = 0; | ||||
| 	s->s_time_max = U32_MAX; | ||||
| 	s->s_flags |= SB_NODIRATIME | SB_NOATIME; | ||||
| 	s->s_magic = CEPH_SUPER_MAGIC; | ||||
| 
 | ||||
| 	ceph_fscrypt_set_ops(s); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds