[LU-7669] lmv_connect() leaks export if lmv_connect_mdc() fails Created: 14/Jan/16  Updated: 11/Aug/16  Resolved: 11/Aug/16

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: None
Fix Version/s: Lustre 2.9.0

Type: Bug Priority: Minor
Reporter: John Hammond Assignee: John Hammond
Resolution: Fixed Votes: 0
Labels: gss, lmv

Severity: 3
Rank (Obsolete): 9223372036854775807

 Description   

This is easy to see when using the shared key patches but applies to master as well. If a client does not have the proper keys installed but tries to mount a shared key-ized FS then we leak a reference on the LMV device.

t:lustre-release# mount q@tcp:/lustre /mnt/lustre -t lustre; lctl dk
mount.lustre: mount q@tcp:/lustre at /mnt/lustre failed: Connection refused
t:lustre-release# lctl dl
  2 ST lmv lustre-clilmv-ffff88007a00f5f8 d2cfcdb0-2a13-93ae-0876-8990528536e6 2
00010000:00000001:3.0:1452801434.533046:0:27296:0:(ldlm_lib.c:577:client_connect_import()) Process leaving via out_ldlm (rc=18446744073709551505 : -111 : 0xffffffffffffff91)
00000020:00000001:3.0:1452801434.533049:0:27296:0:(genops.c:1223:class_disconnect()) Process entered
00000020:00000080:3.0:1452801434.533050:0:27296:0:(genops.c:1244:class_disconnect()) disconnect: cookie 0x2be62eb0a682b6f9
00000020:00000001:3.0:1452801434.533057:0:27296:0:(genops.c:1780:obd_stale_export_put()) Process entered
00000020:00000001:3.0:1452801434.533059:0:27296:0:(genops.c:1804:obd_stale_export_put()) Process leaving
00000020:00000080:3.0:1452801434.533060:0:27296:0:(genops.c:823:class_export_put()) final put ffff88007a6e7538/LMV_MDC_UUID
00000020:00000001:3.0:1452801434.533062:0:27296:0:(lprocfs_status_server.c:443:lprocfs_exp_cleanup()) Process leaving (rc=0 : 0 : 0)
00000020:00000001:3.0:1452801434.533087:0:27296:0:(genops.c:1255:class_disconnect()) Process leaving (rc=0 : 0 : 0)
00800000:00000001:3.0:1452801434.533100:0:27296:0:(obd_class.h:816:obd_connect()) Process leaving (rc=18446744073709551505 : -111 : ffffffffffffff91)
00800000:00020000:3.0:1452801434.533102:0:27296:0:(lmv_obd.c:346:lmv_connect_mdc()) target lustre-MDT0000_UUID connect error -111
00800000:00000001:3.0:1452801434.535203:0:27296:0:(lmv_obd.c:347:lmv_connect_mdc()) Process leaving (rc=18446744073709551505 : -111 : ffffffffffffff91)
00800000:00000001:3.0:1452801434.535207:0:27296:0:(lmv_obd.c:566:lmv_check_connect()) Process leaving via out_disc (rc=18446744073709551505 : -111 : 0xffffffffffffff91)
00000020:00000001:3.0:1452801434.535210:0:27296:0:(genops.c:1223:class_disconnect()) Process entered
00000020:00000080:3.0:1452801434.535211:0:27296:0:(genops.c:1244:class_disconnect()) disconnect: cookie 0x2be62eb0a682b6f2
00000020:00000001:3.0:1452801434.535213:0:27296:0:(genops.c:1780:obd_stale_export_put()) Process entered
00000020:00000001:3.0:1452801434.535214:0:27296:0:(genops.c:1804:obd_stale_export_put()) Process leaving
00000020:00000001:3.0:1452801434.535215:0:27296:0:(genops.c:1255:class_disconnect()) Process leaving (rc=0 : 0 : 0)
00800000:00000001:3.0:1452801434.535217:0:27296:0:(lmv_obd.c:595:lmv_check_connect()) Process leaving (rc=18446744073709551505 : -111 : ffffffffffffff91)
00800000:00000001:3.0:1452801434.535240:0:27296:0:(lmv_obd.c:267:lmv_connect()) Process leaving (rc=18446744073709551505 : -111 : ffffffffffffff91)
00000080:00000001:3.0:1452801434.535247:0:27296:0:(obd_class.h:816:obd_connect()) Process leaving (rc=18446744073709551505 : -111 : ffffffffffffff91)
00000080:00020000:3.0:1452801434.535249:0:27296:0:(llite_lib.c:265:client_common_fill_super()) cannot connect to lustre-clilmv-ffff88007a00f5f8: rc = -111
00000080:00000001:3.0:1452801434.537807:0:27296:0:(llite_lib.c:266:client_common_fill_super()) Process leaving via out (rc=18446744073709551505 : -111 : 0xffffffffffffff91)
00000080:00000001:3.0:1452801434.537815:0:27296:0:(llite_lib.c:1064:ll_fill_super()) Process leaving via out_free (rc=18446744073709551505 : -111 : 0xffffffffffffff91)

This can be fixed by adding a call to

{class_disconnect()}

in the error path of

{lmv_connect()}

. There is some complexity here around the use of

{lmv->exp}. But there seems to be a lot of unnecessary code around the uses of {OBD_CONNECT_REAL} and {lmv_check_connect()} that could be removed to make things clearer and probably remove the need for {lmv->exp}

and calling

{lmv_check_connect()}

on entry to every LMV function.



 Comments   
Comment by Gerrit Updater [ 15/Jan/16 ]

John L. Hammond (john.hammond@intel.com) uploaded a new patch: http://review.whamcloud.com/18018
Subject: LU-7669 lmv: assume a real connection in lmv_connect()
Project: fs/lustre-release
Branch: master
Current Patch Set: 1
Commit: 27dcc1a23d0dcf4c12e9a305c122135903e3e13e

Comment by Gerrit Updater [ 11/Aug/16 ]

Oleg Drokin (oleg.drokin@intel.com) merged in patch http://review.whamcloud.com/18018/
Subject: LU-7669 lmv: assume a real connection in lmv_connect()
Project: fs/lustre-release
Branch: master
Current Patch Set:
Commit: f35328e1e312259d917726f9e953cb6b834e60cf

Comment by Peter Jones [ 11/Aug/16 ]

Landed for 2.9

Generated at Sat Feb 10 02:10:54 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.