@@ -770,7 +770,7 @@ static int ocfs2_lock_create(struct ocfs2_super *osb,
770
770
int dlm_flags )
771
771
{
772
772
int ret = 0 ;
773
- enum dlm_status status ;
773
+ enum dlm_status status = DLM_NORMAL ;
774
774
unsigned long flags ;
775
775
776
776
mlog_entry_void ();
@@ -1138,6 +1138,7 @@ int ocfs2_rw_lock(struct inode *inode, int write)
1138
1138
{
1139
1139
int status , level ;
1140
1140
struct ocfs2_lock_res * lockres ;
1141
+ struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1141
1142
1142
1143
BUG_ON (!inode );
1143
1144
@@ -1147,6 +1148,9 @@ int ocfs2_rw_lock(struct inode *inode, int write)
1147
1148
(unsigned long long )OCFS2_I (inode )-> ip_blkno ,
1148
1149
write ? "EXMODE" : "PRMODE" );
1149
1150
1151
+ if (ocfs2_mount_local (osb ))
1152
+ return 0 ;
1153
+
1150
1154
lockres = & OCFS2_I (inode )-> ip_rw_lockres ;
1151
1155
1152
1156
level = write ? LKM_EXMODE : LKM_PRMODE ;
@@ -1164,14 +1168,16 @@ void ocfs2_rw_unlock(struct inode *inode, int write)
1164
1168
{
1165
1169
int level = write ? LKM_EXMODE : LKM_PRMODE ;
1166
1170
struct ocfs2_lock_res * lockres = & OCFS2_I (inode )-> ip_rw_lockres ;
1171
+ struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1167
1172
1168
1173
mlog_entry_void ();
1169
1174
1170
1175
mlog (0 , "inode %llu drop %s RW lock\n" ,
1171
1176
(unsigned long long )OCFS2_I (inode )-> ip_blkno ,
1172
1177
write ? "EXMODE" : "PRMODE" );
1173
1178
1174
- ocfs2_cluster_unlock (OCFS2_SB (inode -> i_sb ), lockres , level );
1179
+ if (!ocfs2_mount_local (osb ))
1180
+ ocfs2_cluster_unlock (OCFS2_SB (inode -> i_sb ), lockres , level );
1175
1181
1176
1182
mlog_exit_void ();
1177
1183
}
@@ -1182,6 +1188,7 @@ int ocfs2_data_lock_full(struct inode *inode,
1182
1188
{
1183
1189
int status = 0 , level ;
1184
1190
struct ocfs2_lock_res * lockres ;
1191
+ struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1185
1192
1186
1193
BUG_ON (!inode );
1187
1194
@@ -1201,6 +1208,9 @@ int ocfs2_data_lock_full(struct inode *inode,
1201
1208
goto out ;
1202
1209
}
1203
1210
1211
+ if (ocfs2_mount_local (osb ))
1212
+ goto out ;
1213
+
1204
1214
lockres = & OCFS2_I (inode )-> ip_data_lockres ;
1205
1215
1206
1216
level = write ? LKM_EXMODE : LKM_PRMODE ;
@@ -1269,14 +1279,16 @@ void ocfs2_data_unlock(struct inode *inode,
1269
1279
{
1270
1280
int level = write ? LKM_EXMODE : LKM_PRMODE ;
1271
1281
struct ocfs2_lock_res * lockres = & OCFS2_I (inode )-> ip_data_lockres ;
1282
+ struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1272
1283
1273
1284
mlog_entry_void ();
1274
1285
1275
1286
mlog (0 , "inode %llu drop %s DATA lock\n" ,
1276
1287
(unsigned long long )OCFS2_I (inode )-> ip_blkno ,
1277
1288
write ? "EXMODE" : "PRMODE" );
1278
1289
1279
- if (!ocfs2_is_hard_readonly (OCFS2_SB (inode -> i_sb )))
1290
+ if (!ocfs2_is_hard_readonly (OCFS2_SB (inode -> i_sb )) &&
1291
+ !ocfs2_mount_local (osb ))
1280
1292
ocfs2_cluster_unlock (OCFS2_SB (inode -> i_sb ), lockres , level );
1281
1293
1282
1294
mlog_exit_void ();
@@ -1467,8 +1479,9 @@ static int ocfs2_meta_lock_update(struct inode *inode,
1467
1479
{
1468
1480
int status = 0 ;
1469
1481
struct ocfs2_inode_info * oi = OCFS2_I (inode );
1470
- struct ocfs2_lock_res * lockres ;
1482
+ struct ocfs2_lock_res * lockres = NULL ;
1471
1483
struct ocfs2_dinode * fe ;
1484
+ struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1472
1485
1473
1486
mlog_entry_void ();
1474
1487
@@ -1483,10 +1496,12 @@ static int ocfs2_meta_lock_update(struct inode *inode,
1483
1496
}
1484
1497
spin_unlock (& oi -> ip_lock );
1485
1498
1486
- lockres = & oi -> ip_meta_lockres ;
1499
+ if (!ocfs2_mount_local (osb )) {
1500
+ lockres = & oi -> ip_meta_lockres ;
1487
1501
1488
- if (!ocfs2_should_refresh_lock_res (lockres ))
1489
- goto bail ;
1502
+ if (!ocfs2_should_refresh_lock_res (lockres ))
1503
+ goto bail ;
1504
+ }
1490
1505
1491
1506
/* This will discard any caching information we might have had
1492
1507
* for the inode metadata. */
@@ -1496,7 +1511,7 @@ static int ocfs2_meta_lock_update(struct inode *inode,
1496
1511
* map (directories, bitmap files, etc) */
1497
1512
ocfs2_extent_map_trunc (inode , 0 );
1498
1513
1499
- if (ocfs2_meta_lvb_is_trustable (inode , lockres )) {
1514
+ if (lockres && ocfs2_meta_lvb_is_trustable (inode , lockres )) {
1500
1515
mlog (0 , "Trusting LVB on inode %llu\n" ,
1501
1516
(unsigned long long )oi -> ip_blkno );
1502
1517
ocfs2_refresh_inode_from_lvb (inode );
@@ -1543,7 +1558,8 @@ static int ocfs2_meta_lock_update(struct inode *inode,
1543
1558
1544
1559
status = 0 ;
1545
1560
bail_refresh :
1546
- ocfs2_complete_lock_res_refresh (lockres , status );
1561
+ if (lockres )
1562
+ ocfs2_complete_lock_res_refresh (lockres , status );
1547
1563
bail :
1548
1564
mlog_exit (status );
1549
1565
return status ;
@@ -1585,7 +1601,7 @@ int ocfs2_meta_lock_full(struct inode *inode,
1585
1601
int arg_flags )
1586
1602
{
1587
1603
int status , level , dlm_flags , acquired ;
1588
- struct ocfs2_lock_res * lockres ;
1604
+ struct ocfs2_lock_res * lockres = NULL ;
1589
1605
struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1590
1606
struct buffer_head * local_bh = NULL ;
1591
1607
@@ -1607,6 +1623,9 @@ int ocfs2_meta_lock_full(struct inode *inode,
1607
1623
goto bail ;
1608
1624
}
1609
1625
1626
+ if (ocfs2_mount_local (osb ))
1627
+ goto local ;
1628
+
1610
1629
if (!(arg_flags & OCFS2_META_LOCK_RECOVERY ))
1611
1630
wait_event (osb -> recovery_event ,
1612
1631
ocfs2_node_map_is_empty (osb , & osb -> recovery_map ));
@@ -1636,6 +1655,7 @@ int ocfs2_meta_lock_full(struct inode *inode,
1636
1655
wait_event (osb -> recovery_event ,
1637
1656
ocfs2_node_map_is_empty (osb , & osb -> recovery_map ));
1638
1657
1658
+ local :
1639
1659
/*
1640
1660
* We only see this flag if we're being called from
1641
1661
* ocfs2_read_locked_inode(). It means we're locking an inode
@@ -1644,7 +1664,8 @@ int ocfs2_meta_lock_full(struct inode *inode,
1644
1664
*/
1645
1665
if (inode -> i_state & I_NEW ) {
1646
1666
status = 0 ;
1647
- ocfs2_complete_lock_res_refresh (lockres , 0 );
1667
+ if (lockres )
1668
+ ocfs2_complete_lock_res_refresh (lockres , 0 );
1648
1669
goto bail ;
1649
1670
}
1650
1671
@@ -1767,14 +1788,16 @@ void ocfs2_meta_unlock(struct inode *inode,
1767
1788
{
1768
1789
int level = ex ? LKM_EXMODE : LKM_PRMODE ;
1769
1790
struct ocfs2_lock_res * lockres = & OCFS2_I (inode )-> ip_meta_lockres ;
1791
+ struct ocfs2_super * osb = OCFS2_SB (inode -> i_sb );
1770
1792
1771
1793
mlog_entry_void ();
1772
1794
1773
1795
mlog (0 , "inode %llu drop %s META lock\n" ,
1774
1796
(unsigned long long )OCFS2_I (inode )-> ip_blkno ,
1775
1797
ex ? "EXMODE" : "PRMODE" );
1776
1798
1777
- if (!ocfs2_is_hard_readonly (OCFS2_SB (inode -> i_sb )))
1799
+ if (!ocfs2_is_hard_readonly (OCFS2_SB (inode -> i_sb )) &&
1800
+ !ocfs2_mount_local (osb ))
1778
1801
ocfs2_cluster_unlock (OCFS2_SB (inode -> i_sb ), lockres , level );
1779
1802
1780
1803
mlog_exit_void ();
@@ -1783,7 +1806,7 @@ void ocfs2_meta_unlock(struct inode *inode,
1783
1806
int ocfs2_super_lock (struct ocfs2_super * osb ,
1784
1807
int ex )
1785
1808
{
1786
- int status ;
1809
+ int status = 0 ;
1787
1810
int level = ex ? LKM_EXMODE : LKM_PRMODE ;
1788
1811
struct ocfs2_lock_res * lockres = & osb -> osb_super_lockres ;
1789
1812
struct buffer_head * bh ;
@@ -1794,6 +1817,9 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
1794
1817
if (ocfs2_is_hard_readonly (osb ))
1795
1818
return - EROFS ;
1796
1819
1820
+ if (ocfs2_mount_local (osb ))
1821
+ goto bail ;
1822
+
1797
1823
status = ocfs2_cluster_lock (osb , lockres , level , 0 , 0 );
1798
1824
if (status < 0 ) {
1799
1825
mlog_errno (status );
@@ -1832,7 +1858,8 @@ void ocfs2_super_unlock(struct ocfs2_super *osb,
1832
1858
int level = ex ? LKM_EXMODE : LKM_PRMODE ;
1833
1859
struct ocfs2_lock_res * lockres = & osb -> osb_super_lockres ;
1834
1860
1835
- ocfs2_cluster_unlock (osb , lockres , level );
1861
+ if (!ocfs2_mount_local (osb ))
1862
+ ocfs2_cluster_unlock (osb , lockres , level );
1836
1863
}
1837
1864
1838
1865
int ocfs2_rename_lock (struct ocfs2_super * osb )
@@ -1843,6 +1870,9 @@ int ocfs2_rename_lock(struct ocfs2_super *osb)
1843
1870
if (ocfs2_is_hard_readonly (osb ))
1844
1871
return - EROFS ;
1845
1872
1873
+ if (ocfs2_mount_local (osb ))
1874
+ return 0 ;
1875
+
1846
1876
status = ocfs2_cluster_lock (osb , lockres , LKM_EXMODE , 0 , 0 );
1847
1877
if (status < 0 )
1848
1878
mlog_errno (status );
@@ -1854,7 +1884,8 @@ void ocfs2_rename_unlock(struct ocfs2_super *osb)
1854
1884
{
1855
1885
struct ocfs2_lock_res * lockres = & osb -> osb_rename_lockres ;
1856
1886
1857
- ocfs2_cluster_unlock (osb , lockres , LKM_EXMODE );
1887
+ if (!ocfs2_mount_local (osb ))
1888
+ ocfs2_cluster_unlock (osb , lockres , LKM_EXMODE );
1858
1889
}
1859
1890
1860
1891
int ocfs2_dentry_lock (struct dentry * dentry , int ex )
@@ -1869,6 +1900,9 @@ int ocfs2_dentry_lock(struct dentry *dentry, int ex)
1869
1900
if (ocfs2_is_hard_readonly (osb ))
1870
1901
return - EROFS ;
1871
1902
1903
+ if (ocfs2_mount_local (osb ))
1904
+ return 0 ;
1905
+
1872
1906
ret = ocfs2_cluster_lock (osb , & dl -> dl_lockres , level , 0 , 0 );
1873
1907
if (ret < 0 )
1874
1908
mlog_errno (ret );
@@ -1882,7 +1916,8 @@ void ocfs2_dentry_unlock(struct dentry *dentry, int ex)
1882
1916
struct ocfs2_dentry_lock * dl = dentry -> d_fsdata ;
1883
1917
struct ocfs2_super * osb = OCFS2_SB (dentry -> d_sb );
1884
1918
1885
- ocfs2_cluster_unlock (osb , & dl -> dl_lockres , level );
1919
+ if (!ocfs2_mount_local (osb ))
1920
+ ocfs2_cluster_unlock (osb , & dl -> dl_lockres , level );
1886
1921
}
1887
1922
1888
1923
/* Reference counting of the dlm debug structure. We want this because
@@ -2145,12 +2180,15 @@ static void ocfs2_dlm_shutdown_debug(struct ocfs2_super *osb)
2145
2180
2146
2181
int ocfs2_dlm_init (struct ocfs2_super * osb )
2147
2182
{
2148
- int status ;
2183
+ int status = 0 ;
2149
2184
u32 dlm_key ;
2150
- struct dlm_ctxt * dlm ;
2185
+ struct dlm_ctxt * dlm = NULL ;
2151
2186
2152
2187
mlog_entry_void ();
2153
2188
2189
+ if (ocfs2_mount_local (osb ))
2190
+ goto local ;
2191
+
2154
2192
status = ocfs2_dlm_init_debug (osb );
2155
2193
if (status < 0 ) {
2156
2194
mlog_errno (status );
@@ -2178,11 +2216,12 @@ int ocfs2_dlm_init(struct ocfs2_super *osb)
2178
2216
goto bail ;
2179
2217
}
2180
2218
2219
+ dlm_register_eviction_cb (dlm , & osb -> osb_eviction_cb );
2220
+
2221
+ local :
2181
2222
ocfs2_super_lock_res_init (& osb -> osb_super_lockres , osb );
2182
2223
ocfs2_rename_lock_res_init (& osb -> osb_rename_lockres , osb );
2183
2224
2184
- dlm_register_eviction_cb (dlm , & osb -> osb_eviction_cb );
2185
-
2186
2225
osb -> dlm = dlm ;
2187
2226
2188
2227
status = 0 ;
0 commit comments