[PATCH] udf: Fix deadlock when converting file from in-ICB one to normal one

[PATCH] udf: Fix deadlock when converting file from in-ICB one to normal one

During  BKL removal,  conversion  of files  from  in-ICB format  to
normal format got broken.  We call ->writepage with i_data_sem held
but  udf_get_block()  also acquires  i_data_sem  thus creating  A-A
deadlock.

We  fix   the  problem   by  dropping  i_data_sem   before  calling
->writepage() which is safe since i_mutex still protects us against
any  changes in  the  file.  Also fix  pagelock  - i_data_sem  lock
inversion  in   udf_expand_file_adinicb()  by  dropping  i_data_sem
before calling find_or_create_page().

Big Kernel Lock

Linux  contains  a  global   kernel  lock,  kernel_flag,  that  was
originally introduced  in kernel 2.0  as the only SMP  lock. During
2.2 and 2.4, much work went  into removing the global lock from the
kernel and replacing it  with finer-grained localized locks. Today,
the global  lock's use  is minimal. It  still exists,  however, and
developers need to be aware of it.

The global kernel lock is called  the big kernel lock or BKL. It is
a  spinning  lock  that  is recursive;  therefore  two  consecutive
requests for it will not deadlock  the process (as they would for a
spinlock).  Further,  a  process  can  sleep  and  even  enter  the
scheduler while  holding the  BKL. When a  process holding  the BKL
enters the  scheduler, the lock  is dropped so other  processes can
obtain it. These attributes of the BKL helped ease the introduction
of SMP  during the 2.0  kernel series. Today, however,  they should
provide plenty of reason not to use the lock.

source : http://www.linuxjournal.com/article/5833?page=0,2

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s