View | Details | Raw Unified | Return to bug 256005
Collapse All | Expand All

(-)b/sys/fs/fuse/fuse_vnops.c (-2 / +2 lines)
Lines 466-479 fuse_vnop_advlock(struct vop_advlock_args *ap) Link Here
466
	fdisp_make_vp(&fdi, op, vp, td, cred);
466
	fdisp_make_vp(&fdi, op, vp, td, cred);
467
	fli = fdi.indata;
467
	fli = fdi.indata;
468
	fli->fh = fufh->fh_id;
468
	fli->fh = fufh->fh_id;
469
	fli->owner = fl->l_pid;
469
	fli->owner = td->td_proc->p_pid;
470
	fli->lk.start = fl->l_start;
470
	fli->lk.start = fl->l_start;
471
	if (fl->l_len != 0)
471
	if (fl->l_len != 0)
472
		fli->lk.end = fl->l_start + fl->l_len - 1;
472
		fli->lk.end = fl->l_start + fl->l_len - 1;
473
	else
473
	else
474
		fli->lk.end = INT64_MAX;
474
		fli->lk.end = INT64_MAX;
475
	fli->lk.type = fl->l_type;
475
	fli->lk.type = fl->l_type;
476
	fli->lk.pid = fl->l_pid;
476
	fli->lk.pid = td->td_proc->p_pid;
477
477
478
	err = fdisp_wait_answ(&fdi);
478
	err = fdisp_wait_answ(&fdi);
479
	fdisp_destroy(&fdi);
479
	fdisp_destroy(&fdi);
(-)b/tests/sys/fs/fusefs/locks.cc (-21 / +30 lines)
Lines 228-234 TEST_F(GetlkFallback, local) Link Here
228
	ASSERT_LE(0, fd) << strerror(errno);
228
	ASSERT_LE(0, fd) << strerror(errno);
229
	fl.l_start = 10;
229
	fl.l_start = 10;
230
	fl.l_len = 1000;
230
	fl.l_len = 1000;
231
	fl.l_pid = getpid();
231
	fl.l_pid = 0;
232
	fl.l_type = F_RDLCK;
232
	fl.l_type = F_RDLCK;
233
	fl.l_whence = SEEK_SET;
233
	fl.l_whence = SEEK_SET;
234
	fl.l_sysid = 0;
234
	fl.l_sysid = 0;
Lines 247-253 TEST_F(Getlk, no_locks) Link Here
247
	uint64_t ino = 42;
247
	uint64_t ino = 42;
248
	struct flock fl;
248
	struct flock fl;
249
	int fd;
249
	int fd;
250
	pid_t pid = 1234;
250
	pid_t pid = getpid();
251
251
252
	expect_lookup(RELPATH, ino);
252
	expect_lookup(RELPATH, ino);
253
	expect_open(ino, 0, 1);
253
	expect_open(ino, 0, 1);
Lines 256-266 TEST_F(Getlk, no_locks) Link Here
256
			return (in.header.opcode == FUSE_GETLK &&
256
			return (in.header.opcode == FUSE_GETLK &&
257
				in.header.nodeid == ino &&
257
				in.header.nodeid == ino &&
258
				in.body.getlk.fh == FH &&
258
				in.body.getlk.fh == FH &&
259
				/*
260
				 * Though it seems useless, libfuse expects the
261
				 * owner and pid fields to be set during
262
				 * FUSE_GETLK.
263
				 */
259
				in.body.getlk.owner == (uint32_t)pid &&
264
				in.body.getlk.owner == (uint32_t)pid &&
265
				in.body.getlk.lk.pid == (uint64_t)pid &&
260
				in.body.getlk.lk.start == 10 &&
266
				in.body.getlk.lk.start == 10 &&
261
				in.body.getlk.lk.end == 1009 &&
267
				in.body.getlk.lk.end == 1009 &&
262
				in.body.getlk.lk.type == F_RDLCK &&
268
				in.body.getlk.lk.type == F_RDLCK);
263
				in.body.getlk.lk.pid == (uint64_t)pid);
264
		}, Eq(true)),
269
		}, Eq(true)),
265
		_)
270
		_)
266
	).WillOnce(Invoke(ReturnImmediate([=](auto in, auto& out) {
271
	).WillOnce(Invoke(ReturnImmediate([=](auto in, auto& out) {
Lines 273-279 TEST_F(Getlk, no_locks) Link Here
273
	ASSERT_LE(0, fd) << strerror(errno);
278
	ASSERT_LE(0, fd) << strerror(errno);
274
	fl.l_start = 10;
279
	fl.l_start = 10;
275
	fl.l_len = 1000;
280
	fl.l_len = 1000;
276
	fl.l_pid = pid;
281
	fl.l_pid = 0;
277
	fl.l_type = F_RDLCK;
282
	fl.l_type = F_RDLCK;
278
	fl.l_whence = SEEK_SET;
283
	fl.l_whence = SEEK_SET;
279
	fl.l_sysid = 0;
284
	fl.l_sysid = 0;
Lines 290-296 TEST_F(Getlk, lock_exists) Link Here
290
	uint64_t ino = 42;
295
	uint64_t ino = 42;
291
	struct flock fl;
296
	struct flock fl;
292
	int fd;
297
	int fd;
293
	pid_t pid = 1234;
298
	pid_t pid = getpid();
294
	pid_t pid2 = 1235;
299
	pid_t pid2 = 1235;
295
300
296
	expect_lookup(RELPATH, ino);
301
	expect_lookup(RELPATH, ino);
Lines 300-310 TEST_F(Getlk, lock_exists) Link Here
300
			return (in.header.opcode == FUSE_GETLK &&
305
			return (in.header.opcode == FUSE_GETLK &&
301
				in.header.nodeid == ino &&
306
				in.header.nodeid == ino &&
302
				in.body.getlk.fh == FH &&
307
				in.body.getlk.fh == FH &&
308
				/*
309
				 * Though it seems useless, libfuse expects the
310
				 * owner and pid fields to be set during
311
				 * FUSE_GETLK.
312
				 */
303
				in.body.getlk.owner == (uint32_t)pid &&
313
				in.body.getlk.owner == (uint32_t)pid &&
314
				in.body.getlk.lk.pid == (uint64_t)pid &&
304
				in.body.getlk.lk.start == 10 &&
315
				in.body.getlk.lk.start == 10 &&
305
				in.body.getlk.lk.end == 1009 &&
316
				in.body.getlk.lk.end == 1009 &&
306
				in.body.getlk.lk.type == F_RDLCK &&
317
				in.body.getlk.lk.type == F_RDLCK);
307
				in.body.getlk.lk.pid == (uint64_t)pid);
308
		}, Eq(true)),
318
		}, Eq(true)),
309
		_)
319
		_)
310
	).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) {
320
	).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) {
Lines 319-325 TEST_F(Getlk, lock_exists) Link Here
319
	ASSERT_LE(0, fd) << strerror(errno);
329
	ASSERT_LE(0, fd) << strerror(errno);
320
	fl.l_start = 10;
330
	fl.l_start = 10;
321
	fl.l_len = 1000;
331
	fl.l_len = 1000;
322
	fl.l_pid = pid;
332
	fl.l_pid = 0;
323
	fl.l_type = F_RDLCK;
333
	fl.l_type = F_RDLCK;
324
	fl.l_whence = SEEK_SET;
334
	fl.l_whence = SEEK_SET;
325
	fl.l_sysid = 0;
335
	fl.l_sysid = 0;
Lines 368-374 TEST_F(Setlk, clear) Link Here
368
	uint64_t ino = 42;
378
	uint64_t ino = 42;
369
	struct flock fl;
379
	struct flock fl;
370
	int fd;
380
	int fd;
371
	pid_t pid = 1234;
381
	pid_t pid = getpid();
372
382
373
	expect_lookup(RELPATH, ino);
383
	expect_lookup(RELPATH, ino);
374
	expect_open(ino, 0, 1);
384
	expect_open(ino, 0, 1);
Lines 378-384 TEST_F(Setlk, clear) Link Here
378
	ASSERT_LE(0, fd) << strerror(errno);
388
	ASSERT_LE(0, fd) << strerror(errno);
379
	fl.l_start = 10;
389
	fl.l_start = 10;
380
	fl.l_len = 1000;
390
	fl.l_len = 1000;
381
	fl.l_pid = pid;
391
	fl.l_pid = 0;
382
	fl.l_type = F_UNLCK;
392
	fl.l_type = F_UNLCK;
383
	fl.l_whence = SEEK_SET;
393
	fl.l_whence = SEEK_SET;
384
	fl.l_sysid = 0;
394
	fl.l_sysid = 0;
Lines 394-400 TEST_F(Setlk, set) Link Here
394
	uint64_t ino = 42;
404
	uint64_t ino = 42;
395
	struct flock fl;
405
	struct flock fl;
396
	int fd;
406
	int fd;
397
	pid_t pid = 1234;
407
	pid_t pid = getpid();
398
408
399
	expect_lookup(RELPATH, ino);
409
	expect_lookup(RELPATH, ino);
400
	expect_open(ino, 0, 1);
410
	expect_open(ino, 0, 1);
Lines 404-410 TEST_F(Setlk, set) Link Here
404
	ASSERT_LE(0, fd) << strerror(errno);
414
	ASSERT_LE(0, fd) << strerror(errno);
405
	fl.l_start = 10;
415
	fl.l_start = 10;
406
	fl.l_len = 1000;
416
	fl.l_len = 1000;
407
	fl.l_pid = pid;
417
	fl.l_pid = 0;
408
	fl.l_type = F_RDLCK;
418
	fl.l_type = F_RDLCK;
409
	fl.l_whence = SEEK_SET;
419
	fl.l_whence = SEEK_SET;
410
	fl.l_sysid = 0;
420
	fl.l_sysid = 0;
Lines 420-426 TEST_F(Setlk, set_eof) Link Here
420
	uint64_t ino = 42;
430
	uint64_t ino = 42;
421
	struct flock fl;
431
	struct flock fl;
422
	int fd;
432
	int fd;
423
	pid_t pid = 1234;
433
	pid_t pid = getpid();
424
434
425
	expect_lookup(RELPATH, ino);
435
	expect_lookup(RELPATH, ino);
426
	expect_open(ino, 0, 1);
436
	expect_open(ino, 0, 1);
Lines 430-436 TEST_F(Setlk, set_eof) Link Here
430
	ASSERT_LE(0, fd) << strerror(errno);
440
	ASSERT_LE(0, fd) << strerror(errno);
431
	fl.l_start = 10;
441
	fl.l_start = 10;
432
	fl.l_len = 0;
442
	fl.l_len = 0;
433
	fl.l_pid = pid;
443
	fl.l_pid = 0;
434
	fl.l_type = F_RDLCK;
444
	fl.l_type = F_RDLCK;
435
	fl.l_whence = SEEK_SET;
445
	fl.l_whence = SEEK_SET;
436
	fl.l_sysid = 0;
446
	fl.l_sysid = 0;
Lines 446-452 TEST_F(Setlk, eagain) Link Here
446
	uint64_t ino = 42;
456
	uint64_t ino = 42;
447
	struct flock fl;
457
	struct flock fl;
448
	int fd;
458
	int fd;
449
	pid_t pid = 1234;
459
	pid_t pid = getpid();
450
460
451
	expect_lookup(RELPATH, ino);
461
	expect_lookup(RELPATH, ino);
452
	expect_open(ino, 0, 1);
462
	expect_open(ino, 0, 1);
Lines 456-462 TEST_F(Setlk, eagain) Link Here
456
	ASSERT_LE(0, fd) << strerror(errno);
466
	ASSERT_LE(0, fd) << strerror(errno);
457
	fl.l_start = 10;
467
	fl.l_start = 10;
458
	fl.l_len = 1000;
468
	fl.l_len = 1000;
459
	fl.l_pid = pid;
469
	fl.l_pid = 0;
460
	fl.l_type = F_RDLCK;
470
	fl.l_type = F_RDLCK;
461
	fl.l_whence = SEEK_SET;
471
	fl.l_whence = SEEK_SET;
462
	fl.l_sysid = 0;
472
	fl.l_sysid = 0;
Lines 484-490 TEST_F(SetlkwFallback, local) Link Here
484
	ASSERT_LE(0, fd) << strerror(errno);
494
	ASSERT_LE(0, fd) << strerror(errno);
485
	fl.l_start = 10;
495
	fl.l_start = 10;
486
	fl.l_len = 1000;
496
	fl.l_len = 1000;
487
	fl.l_pid = getpid();
497
	fl.l_pid = 0;
488
	fl.l_type = F_RDLCK;
498
	fl.l_type = F_RDLCK;
489
	fl.l_whence = SEEK_SET;
499
	fl.l_whence = SEEK_SET;
490
	fl.l_sysid = 0;
500
	fl.l_sysid = 0;
Lines 504-510 TEST_F(Setlkw, set) Link Here
504
	uint64_t ino = 42;
514
	uint64_t ino = 42;
505
	struct flock fl;
515
	struct flock fl;
506
	int fd;
516
	int fd;
507
	pid_t pid = 1234;
517
	pid_t pid = getpid();
508
518
509
	expect_lookup(RELPATH, ino);
519
	expect_lookup(RELPATH, ino);
510
	expect_open(ino, 0, 1);
520
	expect_open(ino, 0, 1);
Lines 514-520 TEST_F(Setlkw, set) Link Here
514
	ASSERT_LE(0, fd) << strerror(errno);
524
	ASSERT_LE(0, fd) << strerror(errno);
515
	fl.l_start = 10;
525
	fl.l_start = 10;
516
	fl.l_len = 1000;
526
	fl.l_len = 1000;
517
	fl.l_pid = pid;
527
	fl.l_pid = 0;
518
	fl.l_type = F_RDLCK;
528
	fl.l_type = F_RDLCK;
519
	fl.l_whence = SEEK_SET;
529
	fl.l_whence = SEEK_SET;
520
	fl.l_sysid = 0;
530
	fl.l_sysid = 0;
521
- 

Return to bug 256005