Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'ceph-for-4.10-rc5' of git://github.com/ceph/ceph-client

Pull ceph fixes from Ilya Dryomov:
"Three filesystem endianness fixes (one goes back to the 2.6 era, all
marked for stable) and two fixups for this merge window's patches"

* tag 'ceph-for-4.10-rc5' of git://github.com/ceph/ceph-client:
ceph: fix bad endianness handling in parse_reply_info_extra
ceph: fix endianness bug in frag_tree_split_cmp
ceph: fix endianness of getattr mask in ceph_d_revalidate
libceph: make sure ceph_aes_crypt() IV is aligned
ceph: fix ceph_get_caps() interruption

+17 -9
+6 -1
fs/ceph/caps.c
··· 2591 2591 add_wait_queue(&ci->i_cap_wq, &wait); 2592 2592 2593 2593 while (!try_get_cap_refs(ci, need, want, endoff, 2594 - true, &_got, &err)) 2594 + true, &_got, &err)) { 2595 + if (signal_pending(current)) { 2596 + ret = -ERESTARTSYS; 2597 + break; 2598 + } 2595 2599 wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); 2600 + } 2596 2601 2597 2602 remove_wait_queue(&ci->i_cap_wq, &wait); 2598 2603
+3 -2
fs/ceph/dir.c
··· 1230 1230 struct ceph_mds_client *mdsc = 1231 1231 ceph_sb_to_client(dir->i_sb)->mdsc; 1232 1232 struct ceph_mds_request *req; 1233 - int op, mask, err; 1233 + int op, err; 1234 + u32 mask; 1234 1235 1235 1236 if (flags & LOOKUP_RCU) 1236 1237 return -ECHILD; ··· 1246 1245 mask = CEPH_STAT_CAP_INODE | CEPH_CAP_AUTH_SHARED; 1247 1246 if (ceph_security_xattr_wanted(dir)) 1248 1247 mask |= CEPH_CAP_XATTR_SHARED; 1249 - req->r_args.getattr.mask = mask; 1248 + req->r_args.getattr.mask = cpu_to_le32(mask); 1250 1249 1251 1250 err = ceph_mdsc_do_request(mdsc, NULL, req); 1252 1251 switch (err) {
+2 -1
fs/ceph/inode.c
··· 305 305 { 306 306 struct ceph_frag_tree_split *ls = (struct ceph_frag_tree_split*)l; 307 307 struct ceph_frag_tree_split *rs = (struct ceph_frag_tree_split*)r; 308 - return ceph_frag_compare(ls->frag, rs->frag); 308 + return ceph_frag_compare(le32_to_cpu(ls->frag), 309 + le32_to_cpu(rs->frag)); 309 310 } 310 311 311 312 static bool is_frag_child(u32 f, struct ceph_inode_frag *frag)
+5 -4
fs/ceph/mds_client.c
··· 288 288 struct ceph_mds_reply_info_parsed *info, 289 289 u64 features) 290 290 { 291 - if (info->head->op == CEPH_MDS_OP_GETFILELOCK) 291 + u32 op = le32_to_cpu(info->head->op); 292 + 293 + if (op == CEPH_MDS_OP_GETFILELOCK) 292 294 return parse_reply_info_filelock(p, end, info, features); 293 - else if (info->head->op == CEPH_MDS_OP_READDIR || 294 - info->head->op == CEPH_MDS_OP_LSSNAP) 295 + else if (op == CEPH_MDS_OP_READDIR || op == CEPH_MDS_OP_LSSNAP) 295 296 return parse_reply_info_dir(p, end, info, features); 296 - else if (info->head->op == CEPH_MDS_OP_CREATE) 297 + else if (op == CEPH_MDS_OP_CREATE) 297 298 return parse_reply_info_create(p, end, info, features); 298 299 else 299 300 return -EIO;
+1 -1
net/ceph/crypto.c
··· 214 214 SKCIPHER_REQUEST_ON_STACK(req, key->tfm); 215 215 struct sg_table sgt; 216 216 struct scatterlist prealloc_sg; 217 - char iv[AES_BLOCK_SIZE]; 217 + char iv[AES_BLOCK_SIZE] __aligned(8); 218 218 int pad_byte = AES_BLOCK_SIZE - (in_len & (AES_BLOCK_SIZE - 1)); 219 219 int crypt_len = encrypt ? in_len + pad_byte : in_len; 220 220 int ret;