[ceph-client:testing 3/5] fs/ceph/mds_client.c:2921:9-15: ERROR: reference preceded by free on line 2915 (fwd)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

Is an execution path possible from line 2915 to line 2921?

julia

---------- Forwarded message ----------
Date: Mon, 11 Sep 2017 21:06:00 +0800
From: kbuild test robot <fengguang.wu@xxxxxxxxx>
To: kbuild@xxxxxx
Cc: Julia Lawall <julia.lawall@xxxxxxx>
Subject: [ceph-client:testing 3/5] fs/ceph/mds_client.c:2921:9-15: ERROR:
    reference preceded by free on line 2915

CC: kbuild-all@xxxxxx
CC: ceph-devel@xxxxxxxxxxxxxxx
TO: "Yan, Zheng" <zyan@xxxxxxxxxx>

tree:   https://github.com/ceph/ceph-client.git testing
head:   f127eb48b967ff7ce1723da3934bb5c36cd45cbb
commit: 949d09c2e0d789ab126f3685fe7693a242b793f9 [3/5] ceph: optimize flock encoding during reconnect
:::::: branch date: 9 hours ago
:::::: commit date: 9 hours ago

>> fs/ceph/mds_client.c:2921:9-15: ERROR: reference preceded by free on line 2915

# https://github.com/ceph/ceph-client/commit/949d09c2e0d789ab126f3685fe7693a242b793f9
git remote add ceph-client https://github.com/ceph/ceph-client.git
git remote update ceph-client
git checkout 949d09c2e0d789ab126f3685fe7693a242b793f9
vim +2921 fs/ceph/mds_client.c

2f2dc05340 Sage Weil    2009-10-06  2820
2f2dc05340 Sage Weil    2009-10-06  2821  /*
2f2dc05340 Sage Weil    2009-10-06  2822   * Encode information about a cap for a reconnect with the MDS.
2f2dc05340 Sage Weil    2009-10-06  2823   */
2f2dc05340 Sage Weil    2009-10-06  2824  static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap,
2f2dc05340 Sage Weil    2009-10-06  2825  			  void *arg)
2f2dc05340 Sage Weil    2009-10-06  2826  {
20cb34ae9e Sage Weil    2010-05-12  2827  	union {
20cb34ae9e Sage Weil    2010-05-12  2828  		struct ceph_mds_cap_reconnect v2;
20cb34ae9e Sage Weil    2010-05-12  2829  		struct ceph_mds_cap_reconnect_v1 v1;
20cb34ae9e Sage Weil    2010-05-12  2830  	} rec;
2f2dc05340 Sage Weil    2009-10-06  2831  	struct ceph_inode_info *ci;
20cb34ae9e Sage Weil    2010-05-12  2832  	struct ceph_reconnect_state *recon_state = arg;
20cb34ae9e Sage Weil    2010-05-12  2833  	struct ceph_pagelist *pagelist = recon_state->pagelist;
2f2dc05340 Sage Weil    2009-10-06  2834  	char *path;
2f2dc05340 Sage Weil    2009-10-06  2835  	int pathlen, err;
2f2dc05340 Sage Weil    2009-10-06  2836  	u64 pathbase;
3469ed0d14 Yan, Zheng   2016-07-05  2837  	u64 snap_follows;
2f2dc05340 Sage Weil    2009-10-06  2838  	struct dentry *dentry;
2f2dc05340 Sage Weil    2009-10-06  2839
2f2dc05340 Sage Weil    2009-10-06  2840  	ci = cap->ci;
2f2dc05340 Sage Weil    2009-10-06  2841
2f2dc05340 Sage Weil    2009-10-06  2842  	dout(" adding %p ino %llx.%llx cap %p %lld %s\n",
2f2dc05340 Sage Weil    2009-10-06  2843  	     inode, ceph_vinop(inode), cap, cap->cap_id,
2f2dc05340 Sage Weil    2009-10-06  2844  	     ceph_cap_string(cap->issued));
93cea5bebf Sage Weil    2009-12-23  2845  	err = ceph_pagelist_encode_64(pagelist, ceph_ino(inode));
93cea5bebf Sage Weil    2009-12-23  2846  	if (err)
93cea5bebf Sage Weil    2009-12-23  2847  		return err;
2f2dc05340 Sage Weil    2009-10-06  2848
2f2dc05340 Sage Weil    2009-10-06  2849  	dentry = d_find_alias(inode);
2f2dc05340 Sage Weil    2009-10-06  2850  	if (dentry) {
2f2dc05340 Sage Weil    2009-10-06  2851  		path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase, 0);
2f2dc05340 Sage Weil    2009-10-06  2852  		if (IS_ERR(path)) {
2f2dc05340 Sage Weil    2009-10-06  2853  			err = PTR_ERR(path);
e072f8aa35 Sage Weil    2010-08-26  2854  			goto out_dput;
2f2dc05340 Sage Weil    2009-10-06  2855  		}
2f2dc05340 Sage Weil    2009-10-06  2856  	} else {
2f2dc05340 Sage Weil    2009-10-06  2857  		path = NULL;
2f2dc05340 Sage Weil    2009-10-06  2858  		pathlen = 0;
4eacd4cb3a Ilya Dryomov 2016-08-09  2859  		pathbase = 0;
2f2dc05340 Sage Weil    2009-10-06  2860  	}
2f2dc05340 Sage Weil    2009-10-06  2861
be655596b3 Sage Weil    2011-11-30  2862  	spin_lock(&ci->i_ceph_lock);
2f2dc05340 Sage Weil    2009-10-06  2863  	cap->seq = 0;        /* reset cap seq */
2f2dc05340 Sage Weil    2009-10-06  2864  	cap->issue_seq = 0;  /* and issue_seq */
667ca05cd9 Yan, Zheng   2013-05-31  2865  	cap->mseq = 0;       /* and migrate_seq */
99a9c273b9 Yan, Zheng   2013-09-22  2866  	cap->cap_gen = cap->session->s_cap_gen;
20cb34ae9e Sage Weil    2010-05-12  2867
121f22a19a Yan, Zheng   2016-07-04  2868  	if (recon_state->msg_version >= 2) {
20cb34ae9e Sage Weil    2010-05-12  2869  		rec.v2.cap_id = cpu_to_le64(cap->cap_id);
20cb34ae9e Sage Weil    2010-05-12  2870  		rec.v2.wanted = cpu_to_le32(__ceph_caps_wanted(ci));
20cb34ae9e Sage Weil    2010-05-12  2871  		rec.v2.issued = cpu_to_le32(cap->issued);
20cb34ae9e Sage Weil    2010-05-12  2872  		rec.v2.snaprealm = cpu_to_le64(ci->i_snap_realm->ino);
20cb34ae9e Sage Weil    2010-05-12  2873  		rec.v2.pathbase = cpu_to_le64(pathbase);
20cb34ae9e Sage Weil    2010-05-12  2874  		rec.v2.flock_len = 0;
20cb34ae9e Sage Weil    2010-05-12  2875  	} else {
20cb34ae9e Sage Weil    2010-05-12  2876  		rec.v1.cap_id = cpu_to_le64(cap->cap_id);
20cb34ae9e Sage Weil    2010-05-12  2877  		rec.v1.wanted = cpu_to_le32(__ceph_caps_wanted(ci));
20cb34ae9e Sage Weil    2010-05-12  2878  		rec.v1.issued = cpu_to_le32(cap->issued);
20cb34ae9e Sage Weil    2010-05-12  2879  		rec.v1.size = cpu_to_le64(inode->i_size);
20cb34ae9e Sage Weil    2010-05-12  2880  		ceph_encode_timespec(&rec.v1.mtime, &inode->i_mtime);
20cb34ae9e Sage Weil    2010-05-12  2881  		ceph_encode_timespec(&rec.v1.atime, &inode->i_atime);
20cb34ae9e Sage Weil    2010-05-12  2882  		rec.v1.snaprealm = cpu_to_le64(ci->i_snap_realm->ino);
20cb34ae9e Sage Weil    2010-05-12  2883  		rec.v1.pathbase = cpu_to_le64(pathbase);
20cb34ae9e Sage Weil    2010-05-12  2884  	}
3469ed0d14 Yan, Zheng   2016-07-05  2885
3469ed0d14 Yan, Zheng   2016-07-05  2886  	if (list_empty(&ci->i_cap_snaps)) {
92776fd2c2 Yan, Zheng   2017-08-16  2887  		snap_follows = ci->i_head_snapc ? ci->i_head_snapc->seq : 0;
3469ed0d14 Yan, Zheng   2016-07-05  2888  	} else {
3469ed0d14 Yan, Zheng   2016-07-05  2889  		struct ceph_cap_snap *capsnap =
3469ed0d14 Yan, Zheng   2016-07-05  2890  			list_first_entry(&ci->i_cap_snaps,
3469ed0d14 Yan, Zheng   2016-07-05  2891  					 struct ceph_cap_snap, ci_item);
3469ed0d14 Yan, Zheng   2016-07-05  2892  		snap_follows = capsnap->follows;
20cb34ae9e Sage Weil    2010-05-12  2893  	}
be655596b3 Sage Weil    2011-11-30  2894  	spin_unlock(&ci->i_ceph_lock);
2f2dc05340 Sage Weil    2009-10-06  2895
121f22a19a Yan, Zheng   2016-07-04  2896  	if (recon_state->msg_version >= 2) {
40819f6fb2 Greg Farnum  2010-08-02  2897  		int num_fcntl_locks, num_flock_locks;
949d09c2e0 Yan, Zheng   2017-09-11  2898  		struct ceph_filelock *flocks = NULL;
121f22a19a Yan, Zheng   2016-07-04  2899  		size_t struct_len, total_len = 0;
121f22a19a Yan, Zheng   2016-07-04  2900  		u8 struct_v = 0;
40819f6fb2 Greg Farnum  2010-08-02  2901
39be95e9c8 Jim Schutt   2013-05-15  2902  encode_again:
39be95e9c8 Jim Schutt   2013-05-15  2903  		ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks);
949d09c2e0 Yan, Zheng   2017-09-11  2904  		if (num_fcntl_locks + num_flock_locks > 0) {
39be95e9c8 Jim Schutt   2013-05-15  2905  			flocks = kmalloc((num_fcntl_locks + num_flock_locks) *
39be95e9c8 Jim Schutt   2013-05-15  2906  					 sizeof(struct ceph_filelock), GFP_NOFS);
39be95e9c8 Jim Schutt   2013-05-15  2907  			if (!flocks) {
39be95e9c8 Jim Schutt   2013-05-15  2908  				err = -ENOMEM;
39be95e9c8 Jim Schutt   2013-05-15  2909  				goto out_free;
39be95e9c8 Jim Schutt   2013-05-15  2910  			}
39be95e9c8 Jim Schutt   2013-05-15  2911  			err = ceph_encode_locks_to_buffer(inode, flocks,
39be95e9c8 Jim Schutt   2013-05-15  2912  							  num_fcntl_locks,
39be95e9c8 Jim Schutt   2013-05-15  2913  							  num_flock_locks);
39be95e9c8 Jim Schutt   2013-05-15  2914  			if (err) {
39be95e9c8 Jim Schutt   2013-05-15 @2915  				kfree(flocks);
39be95e9c8 Jim Schutt   2013-05-15  2916  				if (err == -ENOSPC)
39be95e9c8 Jim Schutt   2013-05-15  2917  					goto encode_again;
39be95e9c8 Jim Schutt   2013-05-15  2918  				goto out_free;
39be95e9c8 Jim Schutt   2013-05-15  2919  			}
949d09c2e0 Yan, Zheng   2017-09-11  2920  		} else {
949d09c2e0 Yan, Zheng   2017-09-11 @2921  			kfree(flocks);
949d09c2e0 Yan, Zheng   2017-09-11  2922  			flocks = NULL;
949d09c2e0 Yan, Zheng   2017-09-11  2923  		}
121f22a19a Yan, Zheng   2016-07-04  2924
121f22a19a Yan, Zheng   2016-07-04  2925  		if (recon_state->msg_version >= 3) {
121f22a19a Yan, Zheng   2016-07-04  2926  			/* version, compat_version and struct_len */
121f22a19a Yan, Zheng   2016-07-04  2927  			total_len = 2 * sizeof(u8) + sizeof(u32);
3469ed0d14 Yan, Zheng   2016-07-05  2928  			struct_v = 2;
121f22a19a Yan, Zheng   2016-07-04  2929  		}
39be95e9c8 Jim Schutt   2013-05-15  2930  		/*
39be95e9c8 Jim Schutt   2013-05-15  2931  		 * number of encoded locks is stable, so copy to pagelist
39be95e9c8 Jim Schutt   2013-05-15  2932  		 */
121f22a19a Yan, Zheng   2016-07-04  2933  		struct_len = 2 * sizeof(u32) +
40819f6fb2 Greg Farnum  2010-08-02  2934  			    (num_fcntl_locks + num_flock_locks) *
121f22a19a Yan, Zheng   2016-07-04  2935  			    sizeof(struct ceph_filelock);
121f22a19a Yan, Zheng   2016-07-04  2936  		rec.v2.flock_len = cpu_to_le32(struct_len);
121f22a19a Yan, Zheng   2016-07-04  2937
121f22a19a Yan, Zheng   2016-07-04  2938  		struct_len += sizeof(rec.v2);
121f22a19a Yan, Zheng   2016-07-04  2939  		struct_len += sizeof(u32) + pathlen;
121f22a19a Yan, Zheng   2016-07-04  2940
3469ed0d14 Yan, Zheng   2016-07-05  2941  		if (struct_v >= 2)
3469ed0d14 Yan, Zheng   2016-07-05  2942  			struct_len += sizeof(u64); /* snap_follows */
3469ed0d14 Yan, Zheng   2016-07-05  2943
121f22a19a Yan, Zheng   2016-07-04  2944  		total_len += struct_len;
121f22a19a Yan, Zheng   2016-07-04  2945  		err = ceph_pagelist_reserve(pagelist, total_len);
121f22a19a Yan, Zheng   2016-07-04  2946
121f22a19a Yan, Zheng   2016-07-04  2947  		if (!err) {
121f22a19a Yan, Zheng   2016-07-04  2948  			if (recon_state->msg_version >= 3) {
121f22a19a Yan, Zheng   2016-07-04  2949  				ceph_pagelist_encode_8(pagelist, struct_v);
121f22a19a Yan, Zheng   2016-07-04  2950  				ceph_pagelist_encode_8(pagelist, 1);
121f22a19a Yan, Zheng   2016-07-04  2951  				ceph_pagelist_encode_32(pagelist, struct_len);
121f22a19a Yan, Zheng   2016-07-04  2952  			}
121f22a19a Yan, Zheng   2016-07-04  2953  			ceph_pagelist_encode_string(pagelist, path, pathlen);
121f22a19a Yan, Zheng   2016-07-04  2954  			ceph_pagelist_append(pagelist, &rec, sizeof(rec.v2));
121f22a19a Yan, Zheng   2016-07-04  2955  			ceph_locks_to_pagelist(flocks, pagelist,
40819f6fb2 Greg Farnum  2010-08-02  2956  					       num_fcntl_locks,
40819f6fb2 Greg Farnum  2010-08-02  2957  					       num_flock_locks);
3469ed0d14 Yan, Zheng   2016-07-05  2958  			if (struct_v >= 2)
3469ed0d14 Yan, Zheng   2016-07-05  2959  				ceph_pagelist_encode_64(pagelist, snap_follows);
121f22a19a Yan, Zheng   2016-07-04  2960  		}
39be95e9c8 Jim Schutt   2013-05-15  2961  		kfree(flocks);
3612abbd5d Sage Weil    2010-09-07  2962  	} else {
121f22a19a Yan, Zheng   2016-07-04  2963  		size_t size = sizeof(u32) + pathlen + sizeof(rec.v1);
121f22a19a Yan, Zheng   2016-07-04  2964  		err = ceph_pagelist_reserve(pagelist, size);
121f22a19a Yan, Zheng   2016-07-04  2965  		if (!err) {
121f22a19a Yan, Zheng   2016-07-04  2966  			ceph_pagelist_encode_string(pagelist, path, pathlen);
121f22a19a Yan, Zheng   2016-07-04  2967  			ceph_pagelist_append(pagelist, &rec, sizeof(rec.v1));
121f22a19a Yan, Zheng   2016-07-04  2968  		}
40819f6fb2 Greg Farnum  2010-08-02  2969  	}
44c99757fa Yan, Zheng   2013-09-22  2970
44c99757fa Yan, Zheng   2013-09-22  2971  	recon_state->nr_caps++;
e072f8aa35 Sage Weil    2010-08-26  2972  out_free:
2f2dc05340 Sage Weil    2009-10-06  2973  	kfree(path);
e072f8aa35 Sage Weil    2010-08-26  2974  out_dput:
2f2dc05340 Sage Weil    2009-10-06  2975  	dput(dentry);
93cea5bebf Sage Weil    2009-12-23  2976  	return err;
2f2dc05340 Sage Weil    2009-10-06  2977  }
2f2dc05340 Sage Weil    2009-10-06  2978

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux